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