usegcoverheadlimit java jvm java-8 jvm-arguments

usegcoverheadlimit - JVM ARGS ''-Xms1024m-Xmx2048m'' sigue siendo útil en Java 8?



jvm parameters configuration (2)

Debido a la eliminación de PermGen, se eliminaron algunas opciones (como -XX:MaxPermSize ), pero las opciones -Xms y -Xmx funcionan en Java 8. Es posible que bajo Java 8 su aplicación simplemente necesite algo más de memoria. Intenta aumentar el valor -Xmx . Alternativamente, puede intentar cambiar al recolector de basura G1 usando -XX:+UseG1GC .

Tenga en cuenta que si utiliza alguna opción que se eliminó en Java 8, verá una advertencia al iniciar la aplicación:

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

Tengo una aplicación Java 7 que usa JVM ARGS: -Xms1024m -Xmx2048m , y funciona bastante bien.

Después de actualizar a Java 8, se ejecuta en estado de error con excepción:

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)

Me pregunto si JVM ARGS -Xms1024m -Xmx2048m sigue funcionando.

Dado que Java 8 ha eliminado la Generación de Perm: http://www.infoq.com/articles/Java-PERMGEN-Removed , creo que las diferentes estrategias de GC / gestión de memoria entre Java 7 y Java 8 pueden ser la causa raíz. ¿Hay alguna sugerencia?


Lo que sé es una razón por la que se produce un error de "límite de sobrecarga del GC" cuando se libera el 2% de la memoria después de varios ciclos del GC

Por este error, su JVM está indicando que su aplicación está gastando demasiado tiempo en la recolección de basura. por lo tanto, la pequeña cantidad que el GC pudo limpiar se llenará rápidamente nuevamente, lo que obligará al GC a reiniciar el proceso de limpieza nuevamente.

Deberías intentar cambiar el valor de -Xmx y -Xms .