Questions tagged «garbage-collection»

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

19
正确使用IDisposable接口
通过阅读Microsoft文档,我知道IDisposable接口的“主要”用途是清理非托管资源。 对我来说,“非托管”意味着诸如数据库连接,套接字,窗口句柄之类的东西。但是,我已经看到了Dispose()实现该方法以释放托管资源的代码,这对我来说似乎是多余的,因为垃圾收集器应该处理为你。 例如: public class MyCollection : IDisposable { private List<String> _theList = new List<String>(); private Dictionary<String, Point> _theDict = new Dictionary<String, Point>(); // Die, clear it up! (free unmanaged resources) public void Dispose() { _theList.clear(); _theDict.clear(); _theList = null; _theDict = null; } 我的问题是,这是否会使垃圾收集器释放可用内存的MyCollection速度比正常情况更快? 编辑:到目前为止,人们已经发布了一些使用IDisposable清理数据库,数据库连接和位图等非托管资源的良好示例。但是假设_theList在上面的代码中包含上百万字符串,你想释放内存现在,而不是等待垃圾回收器。上面的代码能做到吗?



21
Java是否有析构函数?
Java是否有析构函数?我似乎无法在此找到任何文档。如果没有,我怎么能达到同样的效果? 为了使我的问题更具体,我正在编写一个处理数据的应用程序,规范中说应该有一个“重置”按钮,以将应用程序恢复为最初的启动状态。但是,除非关闭应用程序或按下重置按钮,否则所有数据都必须处于“活动”状态。 我通常是C / C ++程序员,所以我认为这是微不足道的。(因此,我计划最后实现它。)我对程序进行了结构设计,以使所有“可重置”对象都位于同一类中,以便在按下重置按钮时可以销毁所有“活动”对象。 我在想,如果我只是想取消引用数据并等待垃圾收集器来收集数据,如果我的用户重复输入数据并按下“重置”按钮,会不会发生内存泄漏?我也在想,因为Java作为一种语言已经相当成熟,所以应该有一种方法可以防止这种情况的发生或妥善解决。

8
Machine.Config在哪里?
我想应用更改,以便可以为C#3.5应用程序使用Server GC设置-我可以通过编辑machine.config文件来实现。 唯一的问题是我不知道在哪里。 如何在许多不同的机器上以可重复的方式查找此文件的路径

11
在JavaScript中删除对象
我对JavaScript的delete运算符有些困惑。采取以下代码: var obj = { helloText: "Hello World!" }; var foo = obj; delete obj; 执行完这段代码后,objis null,但foo仍指的是一个完全像的对象obj。我猜这个对象是foo指向相同的对象。 这使我感到困惑,因为我希望编写会delete obj删除obj指向内存中的对象,而不仅仅是变量obj。 这是因为JavaScript的垃圾回收工作在保留/释放的基础,所以,如果我没有指向对象的任何其他变量,它会从内存中清除? (顺便说一下,我的测试是在Safari 4中完成的。)


12
为什么调用System.gc()是一种不好的做法?
在回答了有关如何使用强制释放Java中的对象(那个家伙正在清除1.5GB的HashMap)的问题后System.gc(),我被告知System.gc()手动调用是不好的做法,但是注释并不完全令人信服。此外,似乎没有人敢于赞成,也没有反对我的回答。 有人告诉我这是一种不好的做法,但是后来我又被告知,垃圾收集器的运行不再系统地停止世界,而且它也可以有效地被JVM用作提示,所以我有点不知所措。 我确实了解到,JVM在需要回收内存时通常比您了解更多。我也了解担心数千字节的数据是愚蠢的。我还了解到,即使是数百万字节的数据也已不是几年前的样子。但还是1.5 GB?而且您知道内存中大约有1.5 GB的数据悬空。这不像是在黑暗中拍摄。是System.gc()系统上的问题,还是在某种程度上可以解决? 因此,问题实际上是双重的: 为什么打电话是不好的做法System.gc()?它真的只是在某些实现下对JVM的提示,还是总是一个完整的收集周期?真的有垃圾收集器实现可以在不停止工作的情况下完成其工作吗?请阐明人们在对我的答复的评论中所作的各种断言。 门槛在哪里?它是从来没有一个好主意,通话System.gc(),还是有时间当它是可以接受的?如果是这样,那几点?





16
为什么C ++没有垃圾回收器?
首先,因为垃圾收集的优点,所以我没有问这个问题。我提出这个问题的主要原因是,我确实知道Bjarne Stroustrup曾说过C ++将在某个时间点具有垃圾收集器。 话虽如此,为什么不添加呢?已经有一些C ++的垃圾收集器。这仅仅是那些“说起来容易做起来难”的事情之一吗?还是有其他原因未添加(并且不会在C ++ 11中添加)? 交叉链接: C ++垃圾收集器 为了澄清起见,我理解C ++首次创建时没有垃圾收集器的原因。我想知道为什么不能添加收集器。



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.