我的问题是 Headers ,我通过搜索获得了一些知识:
-
linux共享内存How to measure actual memory usage of an application or process?
-
JVM将保留在Xms中设置的内存量What does the -Xms JVM mean in reference to heap memory?
但还是不知道为什么,有些可以提供一些帮助吗?
这是我在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
2 回答
您正在查看常驻内存 - 即消耗的物理RAM . 有关详细信息,请参阅here .
但是,虚拟内存是应用程序消耗的内存,包括换出的内存(到磁盘) . 您'll see there'与虚拟内存和
-Xms
设置更接近 .有关详细信息,请参阅this ServerFault answer .
当您的JVM启动时,它会将最大堆大小保留为启动时连续的虚拟内存块 . 但是,只有实际使用的页面才会成为常驻页面(实际主存)
设置最小大小时,如果JVM不需要,则不会强制JVM使用那么多内存 . 相反,它只需要很少的努力来减少内存到目前为止(你可能仍然会看到一些小的集合)在大多数应用程序中,几乎立即达到最小大小,但是“hello world”程序将使用相同的内存,无论你设置多大最小尺寸 .