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

Java进程使用的RAM比分配的多?,java,linux,memory,centos,minecraft,Java,Linux,Memory,Centos,Minecraft,基本上,我在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.U

基本上,我在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位操作系统上。5000个线程(不太可能,但如果这是一个服务器)可以填补分配堆的12Gib和已用内存的17Gib之间的缺口

  • 本机代码有自己的堆

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


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

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


顺便说一句,16GB是17179000000字节。

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