首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JVM ARGS '-Xms1024m -Xmx2048m‘在Java8中还有用吗?

JVM ARGS '-Xms1024m -Xmx2048m‘在Java8中还有用吗?
EN

Stack Overflow用户
提问于 2015-05-07 16:02:37
回答 2查看 128.5K关注 0票数 29

我有一个使用JVM ARGS:-Xms1024m -Xmx2048m的Java7应用程序,它运行得很好。

在我升级到Java 8之后,它在错误状态下运行,并出现异常:

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是否还在工作?

由于Java8删除了Perm Generation:http://www.infoq.com/articles/Java-PERMGEN-Removed,我认为Java7和Java8之间不同的GC策略/内存管理可能是根本原因。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-07 16:07:12

由于PermGen的删除,一些选项被删除了(比如-XX:MaxPermSize),但选项-Xms-Xmx在Java8中仍然有效。在Java8下,您的应用程序可能只是需要更多的内存。尝试增加-Xmx值。或者,您可以尝试使用-XX:+UseG1GC切换到G1垃圾收集器。

请注意,如果您使用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)
票数 30
EN

Stack Overflow用户

发布于 2015-05-07 16:12:00

我所知道的一个原因是,在几个GC周期后释放了2%的内存时,抛出了“超过GC开销限制”错误

通过这个错误,您的JVM发出信号,表明您的应用程序在垃圾收集上花费了太多时间。因此,GC能够清洗的少量将很快被再次填充,从而迫使GC再次重新启动清洗过程。

您应该尝试更改-Xmx-Xms的值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30095189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档