Подтвердить что ты не робот

Является ли JVM ARGS -Xms1024m -Xmx2048m еще полезной в Java 8?

У меня есть приложение Java 7 с использованием JVM ARGS: -Xms1024m -Xmx2048m, и он работает довольно хорошо.

После перехода на Java 8 он работает в состоянии ошибки с 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)

Мне интересно, работает ли JVM ARGS -Xms1024m -Xmx2048m?

Так как Java 8 удалил Perm Generation: http://www.infoq.com/articles/Java-PERMGEN-Removed, я думаю, что стратегия управления/управления GC между Java 7 и Java 8 может быть основной причиной. Есть ли какие-либо предложения?

4b9b3361

Ответ 1

Из-за удаления PermGen некоторые опции были удалены (например, -XX:MaxPermSize), но параметры -Xms и -Xmx работают на Java 8. Возможно, что в Java 8 вашему приложению просто требуется немного больше памяти. Попытайтесь увеличить значение -Xmx. В качестве альтернативы вы можете попробовать переключиться на сборщик мусора G1, используя -XX:+UseG1GC.

Обратите внимание, что если вы используете какой-либо параметр, который был удален в Java 8, вы увидите предупреждение при запуске приложения:

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

Ответ 2

То, что я знаю, является одной из причин, когда ошибка "превышения верхнего предела GC" возникает, когда 2% памяти освобождается после нескольких циклов GC

По этой ошибке ваша JVM сигнализирует о том, что ваше приложение тратит слишком много времени на сборку мусора. поэтому небольшое количество GC, которое можно было очистить, будет быстро заполнено снова, заставив GC снова перезапустить процесс очистки.

Вам следует попробовать изменить значение -Xmx и -Xms.

Ответ 3

установите одинаковое значение для -Xmx и -Xms