aspose file tools*
The moose likes Java in General and the fly likes JVM process memory never comes down Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "JVM process memory never comes down" Watch "JVM process memory never comes down" New topic
Author

JVM process memory never comes down

John Jai
Bartender

Joined: May 31, 2011
Posts: 1776
Hi,
Below is a sample code to check garbage collection. The process memory shown in Windows Task manager never comes down after executing the program. Please let me know if I am handling the Garbage Collection correctly. My question is why even after GC is completed successfully, why the memory usage shown in Task Manager never comes down. Why there is an accumulation of memory usage - I fear this may lead to OutOfMemoryError in my real application after executing big database operations.
Or that I should not bother about the process memory consumed as shown in the Task Manager & should concentrate only on JVM's free memory?

Please view the below programs & let me know for any issues.... Thanks much!



Below class just creates integers and adds it into a list

<edit> posting the output of program </edit>
Before - Total memory for JVM in Kilo Bytes-> 15872
Before - Free Memory -> 15590
Before - Used Memory in Kilo Bytes -> 281
Thread sleeping --- Please see the memory utilization in Task Manager
<---- Populating List Started --->
<---- Populating List Finished --->
Finalization called on TestGCInput Object..... hence the object is Garbage Collected Successfully!!!
After - Total memory for JVM in Kilo Bytes-> 229764
After - Free Memory -> 229628
After - Used Memory in Kilo Bytes -> 135
Ulf Dittmer
Marshal

Joined: Mar 22, 2005
Posts: 42292
    
  64
Memory allocated to the JVM (which is what TaskManager reports) is never freed. But as you observed, GC can (and does) make more of the allocated memory available to Java code.

If you're really interested in memory usage, GC and such matters, use VisualVM - it produces very detailed graphs that visualize all this.


Ping & DNS - my free Android networking tools app
John Jai
Bartender

Joined: May 31, 2011
Posts: 1776
Thanks Ulf.
Ulf Dittmer wrote:Memory allocated to the JVM (which is what TaskManager reports) is never freed.

1. Can this scenario lead to OutOfMemoryError?
2. Is there a way to clear this memory leak?
3. If the memory reported by Task Manager reaches > 1200 or 1300 K, I can see Out of Memory error. Will that be because of this leak?
<edit> added ques</edit>
Ulf Dittmer
Marshal

Joined: Mar 22, 2005
Posts: 42292
    
  64
Can this scenario lead to OutOfMemoryError?

No. You will get OOMEs if your code uses more memory than the JVM is maximally allocated.

Is there a way to clear this memory leak?

It's not a leak. You can control precisely how much memory the JVM gets allocated via the -Xms and -Xmx options.

You need to differentiate between memory allocated to the JVM via the OS (which is what TaskManager is concerned with, and which never comes down), and memory allocated by the JVM internally for Java objects (which will come down as objects become eligible for GC).
John Jai
Bartender

Joined: May 31, 2011
Posts: 1776
Thanks Ulf,
I can differentiate between the two now.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: JVM process memory never comes down