Java: memory usage issue

I have set maxmimum memory to this value

java -Xmx280m -jar ...

      

Code for using memory usage information (on button click):

    int mb = 1024*1024;
    //Getting the runtime reference from system
    Runtime runtime = Runtime.getRuntime();
    System.out.println("##### Heap utilization statistics [MB] #####");
    //Print used memory
    System.out.println("Used Memory:"
        + (runtime.totalMemory() - runtime.freeMemory()) / mb);
    //Print free memory
    System.out.println("Free Memory:"
        + runtime.freeMemory() / mb);
    //Print total available memory
    System.out.println("Total Memory:" + runtime.totalMemory() / mb);
    //Print Maximum available memory
    System.out.println("Max Memory:" + runtime.maxMemory() / mb);

      

The program shows the following output (2 clicks + new tabs, etc.):

Used Memory:41
Free Memory:123
Total Memory:165
Max Memory:249
Used Memory:67
Free Memory:97
Total Memory:165
Max Memory:249

      

However, when I look at the Linux performance monitor (Centos 7) it shows 330mb

for this java process. How can this be explained?

+3


source to share


2 answers


JVM memory consists of the following segments:

  • Heap memory, which is the storage for Java objects
  • Non-Heap Memory, which is used by Java to store loaded classes and other metadata
  • JVM code itself, JVM internal structures, loaded agent agent code and data, etc.


These parts can be configured with flags that were passed during the start of the process:

The memory structure of JVM process

+2


source


The 280 megabyte you specified is reserved for the Java program heap. VM and other things also use memory, so it will never be the same on the command line and in the process listing.



+2


source







All Articles