谁将垃圾收集或卸载垃圾收集器

时间:2018-07-22 11:53:43

标签: java garbage-collection garbage

完成Java程序后,Vue Routeryoung genold gen将被完全垃圾收集,这里的垃圾收集器也是一个程序,因此谁来为垃圾收集器做垃圾收集?垃圾收集器?还是会那样退出?

4 个答案:

答案 0 :(得分:4)

您的问题是基于一些误解。

  

在完成Java程序后,年轻一代,老一代,烫发一代将被全部垃圾收集。

这不会发生。

Java程序完成后,JVM退出。发生这种情况时,JVM进程将退出,并且操作系统将回收其地址空间。那时,整个堆(在JVM进程地址空间中)就不复存在了。

对象不会被垃圾收集,终结或其他任何形式。取而代之的是,保存对象表示形式的内存已被操作系统收回,并且再也不会被看到 1

  

这里的垃圾收集器也是一个程序,那么谁来为垃圾收集器进行垃圾收集呢?还是会那样退出?

垃圾收集器不是程序。

  • 它是JVM的内置功能。
  • 它是用本机代码而不是Java实现的。
  • 完成GC周期后,它不会退出。相反,它会一直休眠直到下一次需要。
  • 如果GC分配了堆内存(可疑的是 2 ),则该内存将一直使用,直到下一次GC运行为止。

1-即...除非您可以说服操作系统将其提供给您;否则,例如以“核心转储”的形式,或者通过在页面清零之前在虚拟内存系统中四处浏览。

2-GC可能会分配堆对象来保存GC状态或GC日志消息...但是我认为它为那些事情使用了非堆内存。无论哪种方式,为这些目的分配的内存量都应该太小而不必在意。

答案 1 :(得分:1)

当Java程序完成后,您的JVM将为exit/shutdown,并且JVM占用的全部内存将变为可用。因此,在这种情况下,无需GC

答案 2 :(得分:1)

垃圾收集器是Java虚拟机的一部分,它要做的更多,而不仅仅是垃圾收集。程序结束时,整台计算机都将关闭,并释放所有已使用的内存(包括垃圾收集器)

答案 3 :(得分:1)

启动任何进程时,其内存都来自操作系统。

该过程结束时,所有内存都将返回该操作系统。

因此,第二个jvm进程结束,其所有内存再次变为“空闲”。