在Java运行时中,如果我的应用程序释放内存,运行时是否会将内存释放回操作系统?还是回到我的过程?Java VM - 释放的内存是否返回到操作系统?
2
A
回答
4
这取决于JVM的实现,并没有在规范中指定。
Sun JVM将坚持它作为第一步。一旦某个(可配置的)已分配内存的百分比未被使用,它就会将其中的一部分返回给操作系统(行为受到MinHeapFreeRatio
and MaxHeapFreeRatio
settings的影响)。
1
回到过程第一,但也可以回到操作系统到底。由GC分配的内存位于一个大的连续块(堆)或一组块中,GC“释放”只是释放堆中的分配,但不一定返回到操作系统。一旦GC压缩,VM可能会将某些内存返回给操作系统。
GC希望保留一定的空间,以便快速处理将来的“新”内存请求。因此GC尽可能少地向操作系统请求大内存中的内存。
相关问题
- 1. 如何使JVM释放内存回到操作系统
- 2. 在Perl中,如何释放内存到操作系统?
- 3. 如何强制Ruby释放内存到操作系统
- 4. 强制内存释放到操作系统
- 5. BroadcastReceiver是否可以从Android操作系统中杀死以释放内存?
- 6. GC运行后是否可以使用Sun JVM将内存释放到系统?
- 7. 操作系统是否与CPU或内存相互作用
- 8. Android是否有“主机”操作系统?
- 9. SDL不释放系统内存
- 10. COM类在.NET中返回byte [] - 是否释放内存
- 11. Heroku内存限制是否包含运行操作系统所需的内存?
- 12. 为什么Ruby程序不会将堆内存返回到操作系统?
- 13. 对操作系统的内存保护
- 14. 返回Android操作系统名称
- 15. 量角器 - 返回操作系统
- 16. 返回后C++内存释放
- 17. CoreGraphics,内存释放,返回值
- 18. Java中的操作系统
- 19. 是否存在与Android操作系统相当的IIS
- 20. 内存泄漏和操作系统
- 21. Linux内核操作系统寄存器
- 22. 内存管理由操作系统
- 23. 操作系统内存分配地址
- 24. 操作系统内存分配
- 25. Firefox操作系统:进程,内存
- 26. 64位操作系统内存分配
- 27. 操作系统主内存碎片
- 28. 开放源代码云操作系统/操作系统架构
- 29. 是否可以释放UIWebView的内存?
- 30. Java JVM保持对操作系统的内存分配
我从来没有见过Java VM对于将内存返回系统非常积极 - 可能是默认情况下的一件好事。 Java进程往往是长时间运行的,并且不断扩大和缩小可能会使内存碎片化。对于大多数服务器端解决方案来说,释放内存会导致不确定的行为和糟糕的性能,但是如果他们将这个决定留给用户(使用-Xmx/-Xms设置)将会很好。 – 2016-11-14 20:08:00