![]() |
1
6
但是,我最近一直在分析大型Java应用程序的内存性能,并且可以分享一些经验。 以下是我如何发现哪些对象正在升级为旧版本:
首先,您需要确定“旧/终身”空间中的对象。这基本上是您的标准Java堆分析。为此我推荐jmap。它是sun jvm的一部分。
运行:
现在加载.prof文件 Memory analyser (最好的工具,手放下) 我会花一天时间玩内存分析器来理解它,观看屏幕摄像头(需要登录,但值得)。 现在你就知道堆里有什么东西了。 诀窍在于:在内存分析器的概览屏幕中,有一个链接指向:“无法访问的对象直方图”。现在这些对象都将在下一次gc期间收集。但有些可能在伊甸园,有些在幸存者和一些在旧。 现在,找一些具有内存分析功能的分析器,我更喜欢你的工具包。 使用工具包运行应用程序并记录对象分配。 运行它并记录对象创建。创建对象列表后,使用这三个列表来获取正在进行的操作的图片。做人类最擅长做的事,看模式。
另一种方法是你的工具包 generations view . 您可以拍摄堆的快照,并比较快照之间哪些对象仍处于活动状态。如果你用这个 visualgc 您可以确定一个对象必须存活多长时间才能升级到旧版本,并以这些间隔拍摄快照以查看哪些对象仍然存活。 好吧,祝你好运。 /JT |
|
user29759326 · 如何返回递归函数中的最后一个值? 3 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 3 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 3 月前 |
![]() |
rudraraj · java中未声明最终变量 4 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 4 月前 |