Ya.
Ya.

Reputation: 2627

Should you cap the java heap size if you don't need that much?

Let's assume I have plenty of memory on a production Unix box. And I have a Java backend application that does not use all that much heap. Initial tests show that it seems fine with 100MB. However, when uncapped, the memory grows until 1GB and beyond. I probably wouldn't care if it wasn't for the fact that every now and then the processing stream that the application is part of seems to choke. One possible (very vague) explanation is that the culprit is the mentioned Java application.

Question : Could it be that leaving the heap unnecessary high defers the garbage collection for so long that, when it finally kicks in, it has "so much to do" that it visibly impacts the performance?

I should probably mention that we are still running Java 1.4 (pretty old system).

Upvotes: 3

Views: 302

Answers (2)

Aleš
Aleš

Reputation: 9028

You are correct that the GC time grows with the size of the heap. Bigger heap means more work for GC. But, even with heap of several GBs you should see Full GC cycles take somewhere around 2-3s. Do you see such "chokes" or are your chokes much longer?

In general, it is tolerable to have GC time <5% of total application run time.

Furthermore, it is hard to blame GC, it would be helpful if you could show us some GC logs.

Upvotes: 1

user2284545
user2284545

Reputation:

If you don't need it cap it. Yes you are correct giving too much heap space to a Java program 'may' cause the garbage collector threads to run for a longer period of time. What is 'too much' depends on the requirements of your program. I have no hard data to back this up, I have seen this happen in production level Java based servers in the past. Java 1.7 (the latest version) may not present the same issues as Java 1.4.

Upvotes: 2

Related Questions