感谢这里的任何专家可以为以下 JVM 和交换空间相关查询提供建议。提前致谢
1) 当 OutOfMemory 出现在 JVM Java Heap、Perm Generation 或 Native Heap 中时,操作系统将使用交换空间是否正确?或者交换空间用于 native 堆中的 OutOfMemory ?
2)我对 JVM 不可配置 native 堆大小是否正确,因为操作系统会在运行时为 JVM 分配可用 RAM?
3)我们如何为JVM启用交换空间,或者默认情况下为Unix和Window级别的所有进程启用交换空间?
4) 了解交换空间会影响应用程序性能,这是禁用 JVM 交换空间的最佳实践吗?如果不是,原因是什么?
5) 我们如何在 Unix 和 Window 操作系统中禁用交换空间并更改特定 JVM 的交换空间大小,或者它只能在适用于操作系统中所有进程的操作系统级别配置?
最佳答案
这里有很多问题...操作系统确实使用swap
空间创造所谓的virtual memory
(这显然比您可能拥有的 RAM 大)。它通常默认启用,但您需要检查。
您不能指示 JVM 仅使用物理 RAM AFAIK,但这将是操作系统本身而非 JVM 的限制(这应该回答 5)。
您可以禁用交换(同样适用于操作系统,而不是 JVM),但这是一个坏主意。操作系统内部运行着多个进程,每个进程都需要运行空间(在某个时间点可能会超过您的实际 RAM)。它确实会影响性能,但更糟糕的是 - 一些性能损失(我认为操作系统有很多事情可以使这对你更好)还是应用程序的死亡? (这应该回答4)。
关于 (2) 有两个参数控制您将拥有多少堆:Xmx
- JVM 进程将使用的最大堆。和 Xms
- 初始堆。其实就在最近有一个很好的讨论:here .
关于jvm - Java 虚拟机和交换空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43320272/