如何限制java虚拟内存使用(不是虚拟机内存使用)?

时间:2014-10-21 11:23:45

标签: java windows memory memory-management cassandra

我在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的问题。

1 个答案:

答案 0 :(得分:0)

Cassandra旨在大量使用虚拟内存空间,并且非常有效。这样做是为了避免操作系统上下文切换,并利用操作系统非常高效的磁盘到内存寻呼系统。即使分配的虚拟内存量超过物理内存,也可以非常安全地使用此机制。 Cassandra是针对这种情况而设计的,我建议您在验证问题时仅调整Cassandra配置文件。

-Xms-Xmx仅配置Java堆大小。它不包括perm gen,JVM本身所需的内存,或者使用通过内存映射文件分配的off heap数据或使用sun.misc.Unsafe

然而,虚拟内存的使用来自于使用mmap(),即内存映射文件。在Cassandra的案例中,那是memory mapping of the stablesfrom Cassandra's FAQ