我可以用Java强制垃圾收集吗?
System.gc()只是一个建议。它没用。
当我确定某些资源不再被使用时,为什么我不能强行清理它们?
就像C ++中的delete()和C中的free()一样?
当有大量资源无法重复使用时,这确实会影响性能。我们所能做的就是睡眠()。
任何解决方案?谢谢
答案 0 :(得分:12)
不,System.gc()尽可能接近。 Java不是C或C ++,JVM为您管理内存,因此您没有那种细粒度的控件。如果您将不再使用的对象设置为null或松散所有引用,它们将被清除。 GC非常聪明,所以应该好好照顾你。
那就是说,如果你在一个unix盒子上,并强制进行一个线程转储(kill -3),它将非常强制垃圾收集。
答案 1 :(得分:5)
你不应该试图强制GC - 如果内存不足,那么你的内存就会泄漏。在那时强制GC将无济于事,因为如果你持有对象的引用,那么它仍然不会被垃圾收集。
您需要做的是解决实际问题,并确保您没有持有对不再使用的对象的引用。
一些常见的罪魁祸首:
答案 2 :(得分:1)
没有办法明确指示JVM收集垃圾。这仅在系统需要资源时执行。
我唯一知道可能让GC运行的两个操作如下:
关于我的第二点,请在此处查看答案:Garbage collector in java - set an object null。实质上,如果你没有制作你不需要进行垃圾收集的对象(通过丢失你必须使用的引用)那么垃圾收集器没有理由运行,因为它&#39 ; s不知道任何可用的垃圾。
此外,考虑内存中的对象为何/如何影响性能非常重要: