我在Windows 7 x64上有一些java应用程序并将参数传递给它:
-Xms256m -Xmx256m
然后我运行Process explorer并查看java进程的列(值):专用字节(414 620K),工作集(328 876K)和虚拟大小(1 890 352K)。很容易看出,在指定最大和最小堆大小后,java.exe进程会以虚拟大小分配更多内存。这会对Windows上的页面文件大小产生影响。
那么如何限制java虚拟内存的使用?
PS 如果您想要重现这种情况,可以下载cassandra,使用bin\cassandra.bat
修改-Xms256m -Xmx256m
,然后在开始后可以看到堆内存之间的差异大小和虚拟。但是cassandra只是一个java程序,所以关于如何运行 java程序,不如何运行cassandra的问题。
答案 0 :(得分:0)
Cassandra旨在大量使用虚拟内存空间,并且非常有效。这样做是为了避免操作系统上下文切换,并利用操作系统非常高效的磁盘到内存寻呼系统。即使分配的虚拟内存量超过物理内存,也可以非常安全地使用此机制。 Cassandra是针对这种情况而设计的,我建议您在验证问题时仅调整Cassandra配置文件。
-Xms
和-Xmx
仅配置Java堆大小。它不包括perm gen,JVM本身所需的内存,或者使用通过内存映射文件分配的off heap数据或使用sun.misc.Unsafe
。
然而,虚拟内存的使用来自于使用mmap(),即内存映射文件。在Cassandra的案例中,那是memory mapping of the stables和from Cassandra's FAQ。