Questions tagged «garbage-collection»

垃圾回收(GC)是一种自动内存管理形式,它尝试回收垃圾或程序不再使用的对象所占用的内存。

2
是否有必要在C#中显式删除事件处理程序
我有一堂课,提供一些活动。该类是全局声明的,但不能在该全局声明上实例化-可以根据需要在需要它的方法中实例化该类。 每次在方法中需要该类时,都会对其进行实例化并注册事件处理程序。在方法超出范围之前是否有必要显式删除事件处理程序? 当方法超出范围时,类的实例也将超出范围。将事件处理程序注册到超出范围的该实例中是否会产生内存占用空间?(我想知道事件处理程序是否使GC不再看到类实例不再被引用。)

15
在C#中强制垃圾回收的最佳实践
根据我的经验,似乎大多数人会告诉您,强制进行垃圾回收是不明智的,但是在某些情况下,如果您使用的大型对象并非总是在0代中被收集,而内存是一个问题,可以强制收取吗?有没有这样做的最佳实践?

8
Haskell是否需要垃圾收集器?
我很好奇为什么Haskell实现使用GC。 我想不出用纯语言来进行GC的必要性。仅仅是减少复制的优化,还是实际上有必要? 我正在寻找示例代码,如果不存在GC,这些代码可能会泄漏。

16
System.gc()什么时候做某事?
我知道Java中的垃圾回收是自动化的。但是我知道,如果您调用System.gc()代码,那么JVM可能会或可能不会决定此时执行垃圾回收。这究竟如何工作?JVM看到时会根据什么基础/参数确切地决定执行(或不执行)GC System.gc()? 在这种情况下,有任何示例是个好主意吗?

6
将Java对象设置为null是否会做任何事情?
我在浏览一些旧书时,发现了彼得·哈格(Peter Hagger)的“ Practical Java”的副本。在性能部分,建议null不再使用对象引用。 在Java中,设置对象引用是否可以null提高性能或垃圾回收效率?如果是这样,在什么情况下会出现问题?容器类?对象组成?匿名内部类? 我经常在代码中看到这一点。现在这是过时的编程建议还是仍然有用?

5
Go使用哪种垃圾收集?
Go是一种垃圾回收语言: http://golang.org/doc/go_faq.html#garbage_collection 在这里,它说这是一个标志性的垃圾回收器,但是它没有深入研究细节,并且正在进行替代...但是,自Go发行以来,该段似乎没有太多更新。 它仍然是标记和扫描?是保守还是精确?它是世代相传的吗?

11
了解术语和概念的含义-RAII(资源获取是初始化)
C ++开发人员能否请我们很好地描述RAII是什么,为什么它很重要以及它与其他语言是否有关联? 我确实知道一点。我相信它代表“资源获取就是初始化”。但是,这个名称与我对RAII的理解(可能是错误的)并不一致:我给人的印象是RAII是初始化堆栈上对象的一种方式,这样,当这些变量超出范围时,析构函数将自动被称为导致资源被清理。 那么为什么不称之为“使用堆栈触发清除”(UTSTTC :)?您如何从那里到达“ RAII”? 以及如何在堆栈上生成将清除堆中内容的内容?另外,在某些情况下您不能使用RAII?您是否曾经希望进行垃圾收集?至少您可以对某些对象使用垃圾收集器,而对其他对象进行管理? 谢谢。

13
创建数百万个小型临时对象的最佳实践
创建(和释放)数百万个小对象的“最佳实践”是什么? 我正在用Java编写国际象棋程序,并且搜索算法为每个可能的移动生成一个“移动”对象,并且名义搜索可以轻松地每秒生成超过一百万个移动对象。JVM GC能够处理我的开发系统上的负载,但是我对探索以下替代方法感兴趣: 最大限度地减少垃圾收集的开销,并且 减少低端系统的峰值内存占用量。 绝大多数对象的寿命很短,但是生成的移动的大约1%被保留并作为保留值返回,因此任何池化或缓存技术都必须提供排除特定对象被重复使用的能力。 我不希望完全编写出示例代码,但希望您提供进一步阅读/研究的建议,或者具有类似性质的开源示例。

11
Android中的垃圾收集器
我已经看到许多Android答案,建议在某些情况下调用垃圾回收器。 在执行需要大量内存的操作之前,在Android中请求垃圾收集器是一种好习惯吗?如果没有,我应该仅在遇到OutOfMemory错误时才调用它吗? 在诉诸垃圾收集器之前,我还应该使用其他东西吗?

9
您如何从Shell强制垃圾收集?
因此,我正在远程容器上查看带有jmap的堆,并且我想对其进行强制垃圾收集。如何在不弹出jvisualvm或jconsole和朋友的情况下执行此操作? 我知道您不应该进行强制垃圾回收的实践-您应该弄清楚为什么堆很大/越来越大。 我也意识到System.GC()实际上并没有强制垃圾回收-它只是告诉GC您希望它发生。 话虽如此,有没有一种方法可以轻松地做到这一点?我缺少一些命令行应用程序?



20
使用GC.Collect()有什么问题?
尽管我确实理解使用此功能的严重意义(或者至少是我的想法),但我无法理解为什么它成为受尊敬的程序员永远不会使用的东西之一,即使那些甚至不知道的人是为了什么 假设我正在开发一个应用程序,该应用程序的内存使用量会根据用户的操作而变化很大。应用程序的生命周期可以分为两个主要阶段:编辑和实时处理。在编辑阶段,假设创建了数十亿甚至数万亿个对象。其中有些很小,有些则没有,有些可能没有终结器,而有些寿命可能从几毫秒到很长时间不等。接下来,用户决定切换到实时阶段。在这一点上,假设性能起着根本性的作用,并且程序流程中的任何细微改动都可能带来灾难性的后果。然后,通过使用对象池等将对象创建减少到最小程度,但是GC意外插入并扔掉所有对象,然后有人死亡。 问题:在这种情况下,进入第二阶段之前调用GC.Collect()是否明智? 毕竟,这两个阶段永远不会在时间上相互重叠,并且GC可以收集的所有优化和统计信息在这里几乎没有用处... 注意:正如您中某些人指出的那样,.NET可能不是适用于此类应用程序的最佳平台,但这超出了此问题的范围。目的是弄清楚GC.Collect()调用是否可以改善应用程序的整体行为/性能。我们都同意,在这种情况下您会做这种事情的情况极为罕见,但是GC再次尝试猜测并在大多数情况下都做得很好,但这仍然只是猜测。 谢谢。

3
垃圾收集器如何在这里避免无限循环?
考虑下面的C#程序,我在codegolf上提交了它作为创建不循环的循环的答案: class P{ static int x=0; ~P(){ System.Console.WriteLine(++x); new P(); } static void Main(){ new P(); } } 在我的检查中,该程序看起来像一个无限循环,但它似乎运行了数千次迭代,然后该程序成功终止且没有错误(没有引发任何错误)。P最终调用finalizer是否违反规范? 显然,这是愚蠢的代码,永远都不会出现,但是我对程序如何完成感到好奇。 原始代码高尔夫球场文章:: /codegolf/33196/loop-without-looping/33218#33218

3
Java垃圾收集日志消息
我已配置Java将垃圾回收信息转储到日志中(详细GC)。我不确定日志中的垃圾回收项是什么意思。这些条目的示例发布在下面。我在Google上四处搜寻,但找不到可靠的解释。 我有一些合理的猜测,但我正在寻找答案,这些答案提供了对条目中数字含义的严格定义,并有可靠的依据。引用sun文档的所有答案的自动+1。我的问题是: PSYoungGen指的是什么?我认为这与上一代(年轻人)有关,但是究竟是什么呢? 第二个三元组与第一个三元组有什么区别? 为什么要为数字的第一个三元组指定一个名称(PSYoungGen),而没有为第二个三元组指定一个名称(PSYoungGen)? 三元组中的每个数字(内存大小)是什么意思。例如,在109884K-> 14201K(139904K)中,是GC 109884k之前的内存,然后将其减少为14201K。第三个数字有何关系?为什么我们需要第二组数字? 8109.128:[GC [PSYoungGen:109884K-> 14201K(139904K)] 691015K-> 595332K(1119040K),0.0454530秒] 8112.111:[GC [PSYoungGen:126649K-> 15528K(142336K)] 707780K-> 605892K(1121472K),0.0934560秒] 8112.802:[GC [PSYoungGen:130344K-> 3732K(118592K)] 720708K-> 607895K(1097728K),0.0682690秒]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.