当JVM退出时,堆中的对象会发生什么?

时间:2017-08-28 11:17:11

标签: object memory jvm stack heap

启动JVM时,OS会为其分配内存,然后将该内存用作堆和堆栈。当我们在堆中创建一个对象时,JVM退出后对象会发生什么?是否悄然停留在那里,当JVM重启时,操作系统会重新分配该内存?还是会发生其他事情?

2 个答案:

答案 0 :(得分:2)

当JVM退出时,大多数对象只是“蒸发” - ,它们在没有正常的垃圾收集过程(包括终结)的情况下消失。 (possible请求最终确定它们,但这是不明智的,因为它们仍然可以访问和使用。)如果这些对象代表OS资源,如打开文件,那些资源将被释放(关闭),但不保证保存所有未完成的数据(就像你自己close时那样)。

更一般地说,当进程退出时,它的所有正常堆栈和堆内存都会被操作系统立即释放(尽管其中一些,如用于存储可执行文件和其他已读取文件的内容,有时可以重复使用(或者留在使用中)用于需要这些文件的其他进程)。例外情况包括用于进程间通信的shared memory之类的东西,如果不知道它就可能没有使用它。

答案 1 :(得分:1)

当JVM退出时(大多数时候),会释放堆中的对象。

我说大部分时间的原因是因为释放堆是操作系统的责任,而不仅仅是JVM。操作系统负责清理并使内存分配可用于租赁。但这也取决于操作系统,我确信有些操作系统不会遵循这种主流方法。

相关问题