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
user2022068
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:
+2
Maxim Kirilov
source
to share
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
Kayaman
source
to share