Java进程使用更多的RAM比分配?

基本上我在Centos 6.2 16GB系统上运行一个minecraft服务器

我通过启动rtoolkit来启动我的服务器,现在我分配它使用12GB,但它使用muc比这更多,我不知道为什么。 我运行这个命令来运行jar文件:

java -Xmx30M -Xms30M -XX:MaxPermSize=40M -jar Minecraft_RKit.jar USER:PASS 

然后用命令运行这个过程:

 java -Xms12288M -Xmx12288M -Djline.terminal=jline.UnsupportedTerminal -jar /home/craftbukkit.jar nogui 

现在,如果我看看我的Webmin模块,我可以看到它正在使用18025792 kB的RAM。 比我分配的方式。 这随后导致使用这么多内存的进程只会使系统崩溃。

我可能在这里犯了一个愚蠢的错误,但是如果有人能够澄清这个情况,我将不胜感激。

非常感谢。

JVM中很少有内存使用者:

  • 在64位操作系统上, 每个线程至少需要一个MiB的内存 。 5千线程(不太可能,但如果这是一个服务器)可以填补指定的堆12吉比特和17吉比特使用的内存之间的差距

  • 本机代码有自己的堆

  • 在第二个命令行中没有提到PermGen设置

您正在设置最大堆大小,这往往是最大的但不是所有的内存使用量。

你有线程本地堆栈(这可以添加到GB是你有很多),共享库代码和C库使用的任何内存。

BTW 16 GB是17,179,000,000字节。

另一个可能的解释是(除了线程堆栈,permgen和本地堆栈之外),Minecraft服务器可能使用大型内存映射文件,或类似的东西。