我的程序使用-Xms10240m -Xmx10240m运行。我用top来检查内存,大小是3.5g,它小于xms valuse。 use top
但是,当我使用jmap -heap时,我可以看到堆大小约为10g。 use jmap
是什么原因?
感谢。
答案 0 :(得分:0)
使用你的例子-Xms10g -Xmx10g
,当jvm启动时,它将询问操作系统分配10g将用于堆的内存。 op-system将尝试为JVM分配内存(显示为VIRT),但系统没有保证你会分配物理内存,它可能会交换;)
但你会发现VIRT仍然不是10g,原因是10g是针对堆的大小,一个JVM包含更多的堆,例如,堆栈,permgen(热点JDK8,openJDK似乎没有permgen,如果我错了就修复我),本机堆栈,代码,文件等。
RES是真正的物理内存使用,它包括新对象,方法等,还不仅仅是堆。