当启动JVM时,OS会为其分配内存,然后将该内存用作堆和堆栈。当我们在堆中创建一个对象时,JVM退出后对象会发生什么?它是否安静地呆在那里,当JVM重新启动时,OS重新分配内存?或者做其他事情发生?当JVM退出时,堆中的对象会发生什么?
1
A
回答
2
大多数对象简单地“蒸发”时,JVM退出 — 即,它们消失而不正常垃圾收集过程(包括最终确定)的发生。 (它是possible为它们请求完成,但它是不明智的,因为它们仍然可以被访问和使用。)如果这些对象表示操作系统资源,如打开文件,这些资源将被释放(关闭),但不保证所有未完成的数据被保存(当你自己close时发生)。更一般地说,当一个进程退出时,OS的所有正常堆栈和堆内存都会立即释放(尽管它的一部分,就像用于存储可读的可执行文件和其他文件的那些内存有时可以重用(或者保留在其他需要这些文件的进程中)。例外情况包括用于进程间通信的shared memory,如果您不知道它,可能不会使用它。
1
JVM退出时(大部分时间)释放堆中的对象。
我说的原因大部分时间是因为释放堆是操作系统的责任,而不是单独的JVM。操作系统会努力清理并为存储分配提供内存分配。但这也取决于操作系统,我确信有操作系统在那里他们不遵循这种主流方法。
相关问题
- 1. 当获取它的线程退出时,Mutex会发生什么?
- 2. 当你声明一个对象时堆上发生了什么?
- 3. 当FlatFileFooterCallback出错时会发生什么?
- 4. 当您产生activerecord对象时会发生什么?
- 5. 当引用作用域结束时,引用指向指针对象(堆中的对象)时会发生什么?
- 6. JVM不退出时发生TimeoutException异常
- 7. 当其中一个执行线程发生堆栈溢出异常时,JVM会退出吗?
- 8. 当我在Hibernate中合并对象时会发生什么?
- 9. 当我在C++中为对象赋值时,会发生什么?
- 10. 当我在java中创建对象时,jvm究竟发生了什么?
- 11. 持有对同一对象的const引用的对象。退出时会发生什么?
- 12. 当两个对象相等时会发生什么
- 13. 当我为HttpClient对象设置代理时会发生什么?
- 14. 当两个类创建对象时会发生什么?
- 15. WPF:绑定到对象的属性;当对象改变时会发生什么?
- 16. “丢失”堆栈对象会发生什么?
- 17. 当我们抛出一个对象/变量来捕捉时会发生什么?
- 18. 当你抛出异常时,python对象会发生什么变化
- 19. 当Docker容器的PID1退出时,其他进程会发生什么?
- 20. 当父类对象被分配了子类对象时会发生什么?
- 21. Jboss Cache:从缓存中逐出的对象会发生什么?
- 22. 当Java中的集合超出容量时会发生什么?
- 23. 弹出堆栈时内存会发生什么变化?
- 24. 这个对象会发生什么
- 25. 当运行时JVM内存不足以分配时会发生什么?
- 26. 当localStorage已满时会发生什么?
- 27. 当redis重载时会发生什么?
- 28. 当我ping 127.0.0.1时会发生什么
- 29. 当AsyncTasks已满时会发生什么?
- 30. 当crontabs重叠时会发生什么?
通常,当进程退出时,操作系统的虚拟内存管理器将回收进程分配的所有内存。在这种情况下,该进程恰好是JVM。没有什么比我会下注的其他流程。 –