我是Java的新手。
我在用Java实现的分布式框架之上运行一个应用程序。 该应用程序是磁盘和网络I / O密集型作业。
每台机器有32 GB内存。我为每台机器运行4个工作器,并为每个机器分配7 GB的最大堆空间。总的来说,为JVM保留了28 GB的内存空间。剩下的4 GB是为OS(Cent OS 7)保留的。没有重型程序同时运行。
令人惊讶的是,当我通过 dstat 监控系统资源使用情况时,会发生大量的分页。
怎么可能?我限制了JVM的内存使用量!
感谢您的帮助,谢谢
答案 0 :(得分:2)
JVM不会分页内存。操作系统。操作系统如何以及何时选择要驱逐的页面取决于配置。
并且仅设置-Xmx
可以配置JVM中托管堆的上限。无论何时执行IO,它都不会限制文件映射,直接内存分配,本机库或保留在内存中的页面缓存。
所以你没有为JVM“保留”28GB,因为操作系统对此一无所知,而且JVM对其他JVM一无所知。