是否会自动发生?怎么办呢?
答案 0 :(得分:9)
是的,垃圾清除会自动发生。您不需要手动运行它,也不建议使用它。垃圾收集的全部意义在于它应该是透明的。
请参阅:Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine
[顺便说一下,关于java垃圾收集的SO有很多问题]
答案 1 :(得分:3)
是的。您可以运行System.gc()
,但不建议这样做。你还可以memory leaks
答案 2 :(得分:2)
垃圾收集器会在需要时自动收集。除非你真的需要,否则不需要自己做任何事情。
答案 3 :(得分:1)
使用Java虚拟机,数据(对象,基元数组)存储在堆中,堆是所有JVM线程都可以访问的共享内存区域。在JVM启动时为堆分配内存(并且可能在运行时根据配置扩展到某个限制)。每当创建一个新对象时,就会分配一部分堆来存储它。
当堆已满时,即无法进行进一步分配时(这是一个过度简化的版本,我正在跳过详细信息),垃圾收集器会自动启动以回收内存空间。基本上,可以安全地解除分配未被活动线程引用的任何对象。
请注意,垃圾收集器线程通常作为一个非常低的进程线程运行,但是一旦启动,它就不能在任务完成之前暂停。
答案 4 :(得分:0)
Java确实有自动垃圾回收。 但是你需要做一些事情。 Java只能在堆中找到没有引用的对象。你所做的是为你不再需要的变量赋值null,并希望释放堆中的内存。如果你没有为变量赋值null,那么堆中的对象将有一个引用,即使你不再需要它们也会占用内存空间。