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?

24
demandé sur coderz 2015-05-07 11:02:37

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)
21
répondu Tagir Valeev 2015-05-07 08:07:11

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.

3
répondu Ankur Anand 2015-05-07 08:12:00