JVM分配给操作系统的堆内存比实际使用的要多。由于性能考虑,分配内存是一个繁重的操作,因此JVM总是会分配比它需要的更多的内存。Java还为其他事物分配内存,包括每个线程的堆栈。虚拟机的总内存消耗超过-Xmx值并不罕见。JVM维护两个内存区域,即Java堆和本地(或系统)堆。这两个堆具有不同的目的,并由不同的机制维护。Java堆包含Java对象的实例,通常称为“堆”。垃圾回收器维护Java堆,命令行堆设置更改Java堆。Java堆使用mmap进行分配,如果请求大页面支持,则使用shmat进行分配。即使最小堆大小设置较低,Java堆的最大大小也在JVM启动期间预先分配为一个连续的区域。本地或系统堆通过使用操作系统的底层malloc和free机制进行分配,并用于特定Java对象的基础实现;例如:1)即时(JIT)编译器生成的已编译代码2)映射到Java线程的线程jvisualvm向您显示java堆+系统堆。而-Xmx参数仅影响Java堆。链接:http://www-01.ibm.com/support/knowledgecenter/SSYKE2_5.0.0/com.ibm.java.doc.diagnostics.50/diag/problem_determination/aix_mem_heaps.html