# 1 楼答案 在Java虚拟机中,数据(对象、原语数组)存储在堆中,这是所有JVM线程都可以访问的共享内存区域。JVM启动时会为堆分配内存(根据配置,在运行时可能会扩展到某个限制)。每当创建新对象时,都会分配堆的一部分来存储它 当堆已满,即无法进行进一步分配时(这是一个过于简化的版本,我跳过了详细信息),垃圾收集器将自动启动以回收内存空间。基本上,任何未被活动线程引用的对象都可以安全地取消分配 请注意,垃圾收集器线程通常作为一个非常低的进程线程运行,但一旦启动,在任务完成之前不能暂停
# 2 楼答案 是的,垃圾收集是自动发生的。您不需要手动运行它,也不建议这样做。垃圾收集的全部意义在于它应该是透明的 请看:Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine [顺便说一句,关于java垃圾收集,有很多问题]
# 3 楼答案 Java确实有自动垃圾收集功能。 然而,有些事情你需要做。Java只对堆中没有引用的对象进行GC。您要做的是将不再需要的变量赋值为null值,并希望释放堆中的内存。如果不为变量赋值null,堆中的对象将有一个引用,即使不再需要它们,也会占用内存空间
# 1 楼答案
在Java虚拟机中,数据(对象、原语数组)存储在堆中,这是所有JVM线程都可以访问的共享内存区域。JVM启动时会为堆分配内存(根据配置,在运行时可能会扩展到某个限制)。每当创建新对象时,都会分配堆的一部分来存储它
当堆已满,即无法进行进一步分配时(这是一个过于简化的版本,我跳过了详细信息),垃圾收集器将自动启动以回收内存空间。基本上,任何未被活动线程引用的对象都可以安全地取消分配
请注意,垃圾收集器线程通常作为一个非常低的进程线程运行,但一旦启动,在任务完成之前不能暂停
# 2 楼答案
是的,垃圾收集是自动发生的。您不需要手动运行它,也不建议这样做。垃圾收集的全部意义在于它应该是透明的
请看:Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine
[顺便说一句,关于java垃圾收集,有很多问题]
# 3 楼答案
Java确实有自动垃圾收集功能。 然而,有些事情你需要做。Java只对堆中没有引用的对象进行GC。您要做的是将不再需要的变量赋值为null值,并希望释放堆中的内存。如果不为变量赋值null,堆中的对象将有一个引用,即使不再需要它们,也会占用内存空间