java - 即使我限制了最大堆空间大小,JVM 如何进行分页调入/调出?

标签 java jvm

我是 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/

相关文章:

java - 系统资源不足,无法完成请求的服务

java - 如何保证序列化世界中的 Java 实例控制(无枚举)?

java - 构造函数中令人困惑的 Java 分配引用

java - Spring webServiceTemplate 连接超时属性

java - 在 Eclipse 中编辑数据库的用户友好工具

java - 返回尝试资源。这是 JVM 的正确行为吗?

java - 非法访问错误 : Method is inaccessible to class

java - Sun JVM promise 虚拟内存高消耗

java - 如何处理客户端上需要大量内存的 Java 应用程序 ("-J-Xmx"?

java - 遍历 Collection<List<Integer>>