为什么JVM比指定的-Xms消耗更少的内存?

Bri*_* HU 10 java linux garbage-collection jvm

我的问题是标题,我通过搜索获得了一些知识:

  1. linux有共享内存 如何衡量应用程序或进程的实际内存使用情况?

  2. JVM将保留在Xms中设置的内存量 -Xms JVM在引用堆内存时的含义是什么?

但还是不知道为什么,有些可以提供一些帮助吗?

这是我在Ubuntu12.04(64位)上的测试运行 JDK 1.7.0_04.和顶部显示如下:

  PID USER      PR  NI  VIRT  RES       SHR S %CPU %MEM    TIME+  COMMAND
 4067 brian     20   0 5316m **262m** 7496 S    0  3.3   0:00.30 java -**Xms4096m** -Xmx4096m Test
 4066 brian     20   0 3182m **256m** 7496 S    0  3.3   0:00.30 java -**Xms2048m** -Xmx2048m Test
 4065 brian     20   0 2114m **252m** 7492 S    0  3.2   0:00.30 java -**Xms1024m** -Xmx1024m Test
 4064 brian     20   0 1314m  **76m** 7584 S    0  1.0   0:00.20 java -**Xms256m** -Xmx256m Test
 4063 brian     20   0 1180m  **51m** 7608 S    0  0.7   0:00.21 java -**Xms128m** -Xmx128m Test
Run Code Online (Sandbox Code Playgroud)

Bri*_*new 6

您正在查看常驻内存 - 即消耗的物理RAM.有关详细信息,请参见此处

虚拟内存,不过,是你的应用程序,包括换出(到磁盘)的内存占用的内存.你会发现与虚拟内存和你的-Xms设置有更密切的对应关系.

有关详细信息,请参阅此ServerFault答案.


Pet*_*rey 5

当您的JVM启动时,它会将最大堆大小保留为启动时连续的虚拟内存块.但是,只有实际使用的页面才会成为常驻页面(实际主存)

设置最小大小时,如果JVM不需要,则不会强制JVM使用那么多内存.相反,它只需要很少的努力来减少内存到目前为止(你可能仍然会看到一些小的集合)在大多数应用程序中,几乎立即达到最小大小,但是"hello world"程序将使用相同的内存,无论你设置多大最小尺寸.