-Xmx指定最大Java 堆 分配(
-Xms指定最小 堆 分配)。Java进程有其自身的开销(实际的JVM等),加上已加载的类和perm
gen空间(通过设置
-XX:MaxPermSize=128m)也位于该值之外。
将堆分配仅视为Java的“内部工作空间”,而不是整个过程。
尝试进行实验,您会明白我的意思:
java -Xms512m -Xmx1024m ...
另外,尝试使用 JConsole 或 JVisualVM之 类的工具(两者均随Sun / Oracle
JDK一起提供),您将能够看到实际堆使用情况的图形表示形式(以及用于限制大小的设置)。
最后,正如@Peter Lawrey非常正确地指出的那样,常驻内存是此处的关键人物-在您的情况下,JVM仅使用16个MiB RSS(根据“
top”)。只要不将JVM的堆压入交换(非RAM),共享/虚拟分配就不会引起任何问题。同样,正如我在一些评论中所述,还有其他可用的JVM-“
Java”非常有能力在低资源或嵌入式平台上运行。



