Est-ce que JVM ARGS '- Xms1024m -Xmx2048m ' est toujours utile en Java 8?
j'ai une application Java 7 utilisant JVM ARGS:-Xms1024m -Xmx2048m
, et il fonctionne très bien.
après la mise à niveau vers Java 8, Il s'exécute dans l'é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 Java 8 a supprimé Perm Génération: http://www.infoq.com/articles/Java-PERMGEN-Removed, je pense que les différents GC stratégie/gestion de la mémoire entre Java 7 et Java 8 peut être la cause de racine. Est-il toute suggestion?
2 réponses
en Raison de PermGen suppression de certaines options ont été supprimés (comme -XX:MaxPermSize
), mais options -Xms
et -Xmx
travailler en Java 8. Il est possible que sous Java 8 votre application ait simplement besoin d'un peu plus de mémoire. Essayez d'augmenter -Xmx
valeur. Alternativement, vous pouvez essayer de passer au collecteur d'ordures G1 en utilisant -XX:+UseG1GC
.
notez que si vous utilisez une option qui a été supprimée dans Java 8, vous verrez un avertissement 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 est une des raisons pour lesquelles l'erreur" GC overhead limit exceededed " est lancée lorsque 2% de la mémoire est libérée après plusieurs cycles de GC
par cette erreur, votre JVM signale que votre application passe trop de temps dans la collecte des ordures. donc, la petite quantité de GC a été capable de nettoyer sera rapidement rempli à nouveau, obligeant GC à redémarrer le processus de nettoyage à nouveau.
Vous devriez essayer de changer la valeur de -Xmx
et -Xms
.