Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is JVM ARGS '-Xms1024m -Xmx2048m' still useful in Java 8?

I have a Java 7 application using JVM ARGS: -Xms1024m -Xmx2048m, and it runs pretty well.

After I upgrade to Java 8, it runs in error state with Exception:

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded     at org.hibernate.engine.StatefulPersistenceContext.addEntry(StatefulPersistenceContext.java:466)     at org.hibernate.engine.TwoPhaseLoad.postHydrate(TwoPhaseLoad.java:80)     at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1439)     at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1332)     at org.hibernate.loader.Loader.getRow(Loader.java:1230)     at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603)     at org.hibernate.loader.Loader.doQuery(Loader.java:724)     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)     at org.hibernate.loader.Loader.doList(Loader.java:2228)     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)     at org.hibernate.loader.Loader.list(Loader.java:2120)     at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118)     at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1596)     at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306) 

I'm wondering whether JVM ARGS -Xms1024m -Xmx2048m is still working?

Since Java 8 has removed Perm Generation: http://www.infoq.com/articles/Java-PERMGEN-Removed, I think the different GC strategy/memory management between Java 7 and Java 8 may be the root cause. Is there any suggestion?

like image 954
coderz Avatar asked May 07 '15 08:05

coderz


People also ask

Why JVM heap utilization is too high?

This is because the JVM steadily increases heap usage percentage until the garbage collection process frees up memory again. High heap usage occurs when the garbage collection process cannot keep up. An indicator of high heap usage is when the garbage collection is incapable of reducing the heap usage to around 30%.

What is default JVM heap size?

The Java™ virtual machine (JVM) heap size setting directly relates to how many server instances can be started within a dynamic cluster on a specific node. You might need to modify the JVM heap size setting based on your environment configuration. The default value is 256 MB.

What is the maximum heap size in Java?

The default maximum Java heap size is 256 MB.


1 Answers

Due to PermGen removal some options were removed (like -XX:MaxPermSize), but options -Xms and -Xmx work in Java 8. It's possible that under Java 8 your application simply needs somewhat more memory. Try to increase -Xmx value. Alternatively you can try to switch to G1 garbage collector using -XX:+UseG1GC.

Note that if you use any option which was removed in Java 8, you will see a warning upon application start:

$ java -XX:MaxPermSize=128M -version Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0 java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b18) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) 
like image 116
Tagir Valeev Avatar answered Sep 19 '22 19:09

Tagir Valeev