And*_*tin 6 java promotions garbage-collection composition
在每次年轻的GC活动结束后,请让我知道确定促进老一代年轻一代记忆构成的最佳方法是什么?
理想情况下,我想知道负责的班级名称,每个"年轻一代 - >老一代"推广块的80%的堆;
例如:我有600M年轻人,每个任期晋升6M; 我想知道哪个对象构成了这个6M.
谢谢.
小智 6
没有简单的方法可以做到这一点,但是,我最近一直在分析大型Java应用程序的内存性能,并且可以分享一些经验.
以下是我如何找到被提升为旧代的对象:
首先,您需要确定"旧/终身"空间中的对象.这基本上是你标准的java堆分析.为此,我推荐jmap.它是太阳jvm的一部分.run:
jmap -dump:file=heap.hprof PID
获取堆转储.这将在转储期间暂停jvm(在2GB堆上~~ 30秒)
现在在内存分析器中加载.prof文件(这是最好的工具,请放下)我会花一天时间玩Memory Analyzer来了解它,观看screencam(需要登录,但值得).
现在您将了解堆中的对象.
以下是技巧:在Memory分析器的概述屏幕中,有一个链接:"无法访问的对象直方图".现在,这些对象都将在下一次GC期间收集.但有些可能是伊甸园,有些是幸存者,有些是旧的.
现在,让一些具有内存分析功能的分析器,我更喜欢你的Kit.使用yourkit和记录对象分配运行您的应用程序.
运行它并记录对象创建.一旦你有一个创建的对象列表,使用所有三个列表来获得正在发生的事情的图片.做人类最擅长的事情,看模式.
另一种方法是YourKit 代视图.您可以拍摄堆的快照,并比较快照之间仍然存在的对象.如果在visualgc中使用它,则可以确定对象必须活动多长时间才能升级为旧类,并以这些间隔拍摄快照以查看哪些对象仍然存活.
好吧,祝你好运./ JT
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |