垃圾收集器如何在JVM退出之前释放内存?

esbemjvw  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(139)

我读到过垃圾收集器在java中作为daemon线程运行,守护进程线程的优先级较低,它们在后台运行,支持其他非守护进程线程,这就是为什么JVM不等待守护进程线程完成它们的执行。
如果所有non-daemon线程都已退出,但仍有一些内存被占用,那么Garbage Collector如何在JVM停止之前释放资源,而不导致任何内存泄漏?

nbewdwxp

nbewdwxp1#

在JVM退出之前,GC不会释放内存。
实际发生的情况是,当JVM退出时,运行JVM的进程也会退出1。当进程退出时,操作系统会回收该进程(以独占方式)使用的所有RAM和交换页,并回收其虚拟内存页表。
如果你的Java程序(或C / C程序)有内存泄漏,一旦进程被清理,那就没有关系了。操作系统随时知道哪个RAM /交换页属于哪个进程。什么都不会丢失。
1 -如果JVM是由一个C / C
应用程序使用JNI启动的,那么进程不一定会在此时退出。然后C / C++应用程序会决定做什么。但是在这种情况下GC也不会清理。

相关问题