Garbage Collector 如何在 JVM 退出前释放内存?

ans*_*sme 1 java garbage-collection jvm

我读过垃圾收集器daemon在 Java 中作为线程运行,守护线程的优先级较低,它们在后台运行以支持其他非守护线程,这就是为什么JVM不等待守护线程完成它们的执行。

在所有non-daemon线程都已退出但仍有一些内存占用的情况下,如何Garbage Collector在 JVM 停止之前设法释放资源而不导致任何内存泄漏?

Ste*_*n C 5

GC 不会在 JVM 退出之前释放内存。

实际发生的情况是,当 JVM 退出时,运行 JVM 的进程也退出1。当进程退出时,操作系统回收该进程使用的所有 RAM 和交换页(独占)并回收其虚拟内存页表。

如果您的 Java 程序(或 C/C++ 程序)存在内存泄漏,那么一旦进程被清理干净,这无关紧要。操作系统始终知道哪些 RAM/交换页属于哪个进程。什么都不会丢失。


1 - 如果 JVM 是由使用(比如)JNI 的 C/C++ 应用程序启动的,那么该进程不一定会在那时退出。然后由 C/C++ 应用程序决定要做什么。但在这种情况下,GC 也不会清理。