Java似乎忽略了-Xms和-Xmx选项

我想在我的VPS上运行一个用java编写的非常简单的bot。 我想限制jvm内存让我们说10MB(我怀疑它还需要更多)。

我正在使用以下命令运行bot:

java -Xms5M -Xmx10M -server -jar IrcBot.jar“/ home / jbot”

top显示为java保留的实际内存为144m (或者我在这里解释错误了?)。

13614 jbot 17 0 144m 16m 6740 S 0.0 3.2 0:00.20 java

任何想法在这里可能是错的?

Java版“1.6.0_20”Java(TM)SE运行时环境(版本1.6.0_20-b02)Java HotSpot(TM)客户端VM(版本16.3-b01,混合模式)

BTW。 我正在运行CentOS – 如果重要的话。

编辑:谢谢你的回答。

我不能真正接受它们中的任何一个,因为事实certificate问题在于我选择编写程序的语言,而不是JVM本身。

-Xmx指定最大Java 分配( -Xms指定最小分配)。 Java进程有自己的开销(实际的JVM等),加上加载的类和perm gen空间(通过-XX:MaxPermSize=128m )也位于该值之外。

将您的堆分配视为Java的“内部工作空间”,而不是整个过程。

尝试实验,你会明白我的意思:

 java -Xms512m -Xmx1024m ... 

此外,尝试使用JConsoleJVisualVM等工具(两者都随Sun / Oracle JDK一起提供),您将能够看到实际堆使用情况的图形表示(以及用于约束大小的设置)。

最后,正如@Peter Lawrey所说的那样,驻留内存是关键数字 – 在你的情况下,JVM只使用16 MiB RSS(根据’top’)。 只要JVM的堆没有被推入交换(非RAM),共享/虚拟分配就不会引起任何问题。 同样,正如我在一些评论中所述,还有其他JVM可用 – “Java”能够在低资源或嵌入式平台上运行。

JVM映射在大约150米的共享库中。 如果您尝试最小化物理主内存,则使用的虚拟内存量不太可能很重要。

您要查看的数字是驻留内存,它是实际使用的物理主内存量(16 MB)

Xmx是最大大小,但除此之外,JVM需要在内存中保留一些其他内容:堆栈,类等。有关JVM内存结构的文章,请参阅此文章 。