我是 Java 新手。
我在用 Java 实现的分布式框架之上运行一个应用程序。 该应用程序是磁盘和网络 I/O 密集型作业。
每台机器有 32 GB 内存。我每台机器运行 4 个工作进程,并为每个进程分配 7 GB 最大堆空间。因此总共为 JVM 保留了 28 GB 内存空间。剩余的 4 GB 保留给操作系统 (Cent OS 7)。没有并发运行的繁重程序。
令人惊讶的是,当我通过 dstat 监控系统资源使用情况时,发生了大量的分页。
这怎么可能?我限制了 JVM 的内存使用!
感谢您的帮助,谢谢
最佳答案
JVM 不会调出内存。操作系统确实如此。操作系统如何以及何时选择逐出哪些页面取决于配置。
设置 -Xmx
only 配置 JVM 内托管堆的上限。当您进行 IO 时,它不会限制文件映射、直接内存分配、 native 库或保留在内存中的页面缓存。
所以你并没有真正为 JVM“保留”28GB,因为操作系统对此一无所知,而 JVM 对其他 JVM 也一无所知。
关于java - 即使我限制了最大堆空间大小,JVM 如何进行分页调入/调出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45181790/