1

过去我使用 jvmmonitor.org 的 eclipse 插件进行 CPU 分析,但现在我对它的内存分析能力感到困惑。具体来说,它没有列出我们的任何课程。它主要显示原语、原语数组、java.lang.String 以及一些 org.hibernate 和 org.springframework 类。是否有一些我可能需要调整的内存配置文件配置,因为我当然希望我们本地编写的 com.* 类会出现在内存分析中。

4

1 回答 1

3

您很可能没有完全正确地读取数据。当然,原语和 String(s) 具体可能会占用绝大多数内存。

您的对象可能确实持有对其中一些对象的引用,并且实际上缓存它们,通过使用枚举减少它们的实例数量,实习()经常使用的字符串,使用 StringBuilder / StringBuffer 而不是 String,并且不要忘记将其归零旧引用更有可能解决您遇到的任何内存问题。在大多数情况下调整代码的内部结构不太可能会有所帮助(除非您在特殊对象中分配大块数据,这些对象由于某种原因不是原语或数组 - 不太可能),而不会删除那些不需要的字符串和原语。

那么问题就变成了为什么所有这些东西都在记忆中?我们能摆脱它们吗?如果有怎么办?通常通过清空引用、消除不必要的分配、实习字符串、使用弱引用使它们可用于垃圾收集、不通过延迟初始化或其他策略(对象重用)首先加载它们、静态方法而不是实例方法, ETC。

从他们的网站:“ JVM Monitor不提供分析引用的能力,而是提供(原文如此)生成 hprof 文件的能力,以便您可以使用其他工具(如Memory Analyzer )进一步分析引用。” 我建议您查阅那里的文档以及他们的博客。我会注意到有用于分析 hprof 文件的替代工具。

于 2013-09-13T18:49:40.570 回答