java堆内存大于TOP

时间:2016-06-14 07:32:49

标签: java heap

我的程序使用-Xms10240m -Xmx10240m运行。我用top来检查内存,大小是3.5g,它小于xms valuse。 use top

但是,当我使用jmap -heap时,我可以看到堆大小约为10g。 use jmap

是什么原因?

感谢。

1 个答案:

答案 0 :(得分:0)

  1. -Xms选项用于JVM最小堆大小定义
  2. top显示使用的实际内存(VIRT / RES / SHR)过程
  3. 使用你的例子-Xms10g -Xmx10g,当jvm启动时,它将询问操作系统分配10g将用于堆的内存。 op-system将尝试为JVM分配内存(显示为VIRT),但系统没有保证你会分配物理内存,它可能会交换;)

    但你会发现VIRT仍然不是10g,原因是10g是针对的大小,一个JVM包含更多的堆,例如,堆栈,permgen(热点JDK8,openJDK似乎没有permgen,如果我错了就修复我),本机堆栈,代码,文件等。

    RES是真正的物理内存使用,它包括新对象,方法等,还不仅仅是堆。