几乎每个人最终都会遇到使用Java的GC问题.
是否有烹饪指南或半自动化工具来调整GC for Java?
我的理由是这样的:
所以问题确实是:我能以检查清单的方式使用某些东西吗?或者甚至可能是一个分析GC日志或堆转储的工具,并给我具体的提示在哪里查看(而不是告诉我"95%的数据分配在byte []类型的对象中,这基本上是无用的).
相关问题:
我在JVM堆(Java 1.7)中遇到了无法访问的对象.从图片中可以看出(图片中的所有类都无法访问),我们有超过74%的对象没有参考,所以应该收集它.这个状态在我们的tomcat 7服务器上运行3周之后,只运行探测监控应用程序,tomcat管理器和我们的webapp,这可能是问题的根源.
我们的应用程序基于JSF 1.2,在客户端上具有状态保存功能,如下图所示 - 主要使用ViewSaveState的char数组.当我从jVisualVM手动运行GC时,它会删除所有无法访问的对象,并且在堆到达其限制的3周之前一切正常.
如何清除某些物体?
我们的JVM参数
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=29001
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=
-Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true
-Xms320m
-Xmx2500m
-XX:MaxPermSize=500m
-XX:PermSize=96m
-verbose:gc
-Xloggc:/var/log/gc.log
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xdebug -Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=n
-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
Run Code Online (Sandbox Code Playgroud)

OutOfMemoryError的STACKTRACES
我认为原因隐藏在其他地方,堆栈跟踪来自app的不同部分.可能存在一些泄漏,但堆栈跟踪仅报告最后一个组件,当没有任何内容时,它会及时声明某些内存.
java.lang.OutOfMemoryError: Java heap space
at java.util.LinkedHashMap.createEntry(LinkedHashMap.java:442)
at java.util.HashMap.addEntry(HashMap.java:888)
at java.util.LinkedHashMap.addEntry(LinkedHashMap.java:427)
at java.util.HashMap.put(HashMap.java:509)
at sun.util.resources.OpenListResourceBundle.loadLookup(OpenListResourceBundle.java:134)
at sun.util.resources.OpenListResourceBundle.loadLookupTablesIfNecessary(OpenListResourceBundle.java:113)
at sun.util.resources.OpenListResourceBundle.handleGetObject(OpenListResourceBundle.java:74)
at sun.util.resources.TimeZoneNamesBundle.handleGetObject(TimeZoneNamesBundle.java:75)
at java.util.ResourceBundle.getObject(ResourceBundle.java:389)
at java.util.ResourceBundle.getObject(ResourceBundle.java:392)
------------------
Exception in thread "Timer-22" Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2" java.lang.OutOfMemoryError: Java heap space
Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1" java.lang.OutOfMemoryError: Java heap space
------------------
Caused by: java.lang.OutOfMemoryError: Java heap …Run Code Online (Sandbox Code Playgroud)