12

My question is as the title, and I got some knowledge by searching:

  1. linux has shared memory How to measure actual memory usage of an application or process?

  2. JVM will reserve the amount of memory setted in Xms What does the -Xms JVM mean in reference to heap memory?

But still don't know why, some on can offer some help?

Here is my test run on Ubuntu12.04(64bit) | JDK 1.7.0_04. and top shows below:

  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
Community
  • 1
  • 1
Brian HU
  • 187
  • 2
  • 10

2 Answers2

7

When your JVM starts it reserves your maximum heap size as one continuous block of virtual memory on startup. However, only the pages actually used become resident pages (actual main memory)

When you set the minimum size, it doesn't force the JVM to use that much memory if it doesn't need it. Instead it takes little effort to reduce memory up to this point (you might still see some minor collections) In most applications the minimum size is reached almost immediately, but a "hello world" program will use the same memory no matter how large you set the minimum size to be.

Peter Lawrey
  • 525,659
  • 79
  • 751
  • 1,130
  • so do you mean that, if I set xms=xmx=6g, most of the time the gc is not triggered even I have only 4g reachable objects? – JaskeyLam Oct 18 '17 at 06:39
6

You're looking at the resident memory - that is, the physical RAM consumed. See here for more info.

The virtual memory, however, is the memory consumed by your application, including the memory swapped out (to disk). You'll see there's a closer correspondance with the virtual memory and your -Xms settings.

See this ServerFault answer for more info.

Community
  • 1
  • 1
Brian Agnew
  • 268,207
  • 37
  • 334
  • 440
  • just about to ask "why swap used even while my memory are abundant". and got the answer from the url you've attached...thank you! – Brian HU Aug 24 '12 at 12:02
  • So when will the RES memory grow up xms? I have a progress which xms and xmx=6g, and after it bootstrap, RES is 4g, after a day, it is 5.9g, but when I dump the heap, it is only 3.9g. So will jvm continue to consume memory until xms when it needs even though the used objects in memory does not need that much? – JaskeyLam Oct 18 '17 at 06:37