Est-ce que JVM ARGS ‘-Xms1024m -Xmx2048m’ est toujours utile dans Java 8?

J’ai une application Java 7 utilisant JVM ARGS: -Xms1024m -Xmx2048m , et ça fonctionne plutôt bien.

Après la mise à niveau vers Java 8, il fonctionne en état d’erreur avec 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) 

Je me demande si JVM ARGS -Xms1024m -Xmx2048m fonctionne toujours?

Depuis que Java 8 a supprimé Perm Generation: http://www.infoq.com/articles/Java-PERMGEN-Removed , je pense que la gestion de la mémoire et de la stratégie du GC entre Java 7 et Java 8 peut être la cause principale. Y a-t-il une suggestion?

En raison de la suppression de PermGen, certaines options ont été supprimées (comme -XX:MaxPermSize ), mais les options -Xms et -Xmx fonctionnent en Java 8. -Xmx Java 8, il est possible que votre application nécessite un peu plus de mémoire. Essayez d’augmenter la valeur -Xmx . Vous pouvez également essayer de passer au collecteur de déchets G1 en utilisant -XX:+UseG1GC .

Notez que si vous utilisez une option qui a été supprimée dans Java 8, un avertissement s’affiche au démarrage de l’application:

 $ 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) 

Ce que je sais, c’est l’une des raisons pour lesquelles une erreur «dépassement de la limite de dépassement du CPG» est émise lorsque 2% de la mémoire est libérée après plusieurs cycles de CPG

Par cette erreur, votre machine virtuelle Java indique que votre application passe trop de temps dans le nettoyage de la mémoire. ainsi, la petite quantité que GC a pu nettoyer sera rapidement remplie, ce qui obligera GC à redémarrer le processus de nettoyage.

Vous devriez essayer de changer la valeur de -Xmx et -Xms .