相关疑难解决方法(0)

是否有关于GC问题的食谱指南?

几乎每个人最终都会遇到使用Java的GC问题.

是否有烹饪指南或半自动化工具来调整GC for Java?

我的理由是这样的:

  • 几乎任何人都有这些问题
  • 有许多可能的因素(比如20),其中只有少数会影响你的问题.
  • 大多数人不知道如何识别关键因素,因此GC调整更像是黑人艺术而不是科学.
  • 并非每个人都使用HotSpot VM.不同的Sun版本具有不同的GC特征.
  • 实验没有什么动力(比如每天运行具有稍微不同设置的VM以查看它们是如何发挥作用的).

所以问题确实是:我能以检查清单的方式使用某些东西吗?或者甚至可能是一个分析GC日志或堆转储的工具,并给我具体的提示在哪里查看(而不是告诉我"95%的数据分配在byte []类型的对象中,这基本上是无用的).

相关问题:

java garbage-collection

34
推荐指数
2
解决办法
5776
查看次数

无法从堆中收集无法访问的对象

我在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)

http://puu.sh/b7mjB/3d23de7d41.png

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)

java heap tomcat garbage-collection jvm

10
推荐指数
2
解决办法
5734
查看次数

标签 统计

garbage-collection ×2

java ×2

heap ×1

jvm ×1

tomcat ×1