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

Object 当JVM退出时,堆中的对象会发生什么情况?,object,memory,jvm,heap-memory,stack-memory,Object,Memory,Jvm,Heap Memory,Stack Memory,当JVM启动时,操作系统会将内存分配给它,然后将该内存用作堆和堆栈。当我们在堆中创建一个对象时,JVM退出后该对象会发生什么?当JVM重新启动时,它会静静地停留在那里,操作系统会重新分配内存吗?还是发生了其他事情?当JVM退出时(大多数情况下),堆中的对象被释放 大多数时候我之所以说,是因为释放堆是操作系统的责任,而不仅仅是JVM的责任。操作系统负责清理并使内存分配可用于租赁。但这也取决于操作系统,我确信有些操作系统不遵循这种主流方法。大多数对象在JVM退出时只是“蒸发”——即,它们在没有正常垃

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

当JVM退出时(大多数情况下),堆中的对象被释放

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

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


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

通常,当进程退出时,操作系统的虚拟内存管理器将回收该进程分配的所有内存。在本例中,进程恰好是JVM。与我打赌的其他过程没有什么不同。