【问题标题】:What happens to the Objects in the heap when JVM exits?当 JVM 退出时,堆中的对象会发生什么?
【发布时间】:2018-02-05 15:32:39
【问题描述】:

当 JVM 启动时,操作系统会为其分配内存,然后该内存用作堆和堆栈。当我们在堆中创建对象时,JVM退出后对象会发生什么?当 JVM 重新启动时,它会安静地呆在那里并且操作系统会重新分配该内存吗?还是发生了其他事情?

【问题讨论】:

  • 通常,当一个进程退出时,操作系统的虚拟内存管理器会回收该进程分配的所有内存。在这种情况下,该进程恰好是 JVM。与我打赌的其他过程没有什么不同。

标签: object memory jvm heap-memory stack-memory


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    当 JVM 退出时(大部分时间),堆中的对象被释放。

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

    【讨论】:

      猜你喜欢
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 2017-06-12
      相关资源
      最近更新 更多