感谢这里的任何专家可以就以下 JVM 和交换空间相关查询提供建议。提前致谢
1) 当 JVM Java 堆、永久代或本机堆中发生内存不足时,操作系统将使用交换空间,我对吗?或者交换空间用于本机堆中的内存不足?
2)我是否正确,本机堆大小在 JVM 中不可配置,因为操作系统会在运行时将可用 RAM 分配给 JVM?
3) 如何为 JVM 启用交换空间,或者默认为 Unix 和 Window 级别的所有进程启用交换空间?
4) 了解交换空间会影响应用程序性能,这是禁用 JVM 交换空间的最佳实践吗?如果不是,原因是什么?
5) 我们如何在 Unix 和 Window 操作系统中禁用交换空间并更改特定 JVM 的交换空间大小,或者它只能在操作系统级别进行配置,应用于操作系统中的所有进程?
这里有很多问题...操作系统确实使用swap
空间来创造所谓的virtual memory
(这显然比您可能拥有的 RAM 大)。这是usually默认情况下启用,但您需要检查。
您不能指示 JVM 仅使用物理 RAM AFAIK,但这将是操作系统本身的限制,而不是 JVM(这应该回答 5)。
您可以禁用交换(再次对于操作系统,而不是 JVM),但这是一个坏主意。操作系统内部运行着多个进程,每个进程都需要运行空间(在某个时间点可能会超出您的实际 RAM)。它确实会影响性能,但更糟糕的是 - 一些性能损失(我假设操作系统有很多东西可以让这对你来说更好)或应用程序的死亡? (这应该回答 4)。
关于 (2),有两个参数控制您将拥有多少堆:Xmx
- JVM 进程将使用的最大堆。和Xms
- 初始堆。其实最近有一个很好的讨论:here https://stackoverflow.com/questions/43302720/does-xms-and-xmx-flags-reserve-machines-resources-in-java/43307880#43307880.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)