过去我曾使用jvmmonitor.org的eclipse插件进行CPU分析,但现在我对其内存分析功能感到困惑。具体来说,它没有列出我们的任何课程。它主要显示原语,基元数组,java.lang.String以及一些org.hibernate和org.springframework类。是否存在我可能需要调整的内存配置文件的一些配置,因为我当然希望我们的本地编写的com。*类将出现在内存分析中。
答案 0 :(得分:3)
您很可能没有正确地阅读数据。 当然,原语和字符串特别可能占据绝大多数内存。
您的对象可能确实包含对其中某些对象的引用,实际上是缓存它们,通过使用Enums,intern()经常使用的字符串,使用StringBuilder / StringBuffer而不是String来减少实例数量,而不是忘记将旧引用置空更有可能解决您遇到的任何内存问题。在大多数情况下调整代码内部结构的可能性不大(除非您在特殊对象中分配大块数据,这些对象由于某种原因而不是基元或数组 - 不太可能),而不会删除那些不需要的字符串和基元。
那么问题就变成为什么所有这些东西都在记忆中?我们可以摆脱它们吗?如果是这样的话?通常通过使引用归零,消除不必要的分配,实现字符串,使用弱引用使其可用于垃圾收集,不通过延迟初始化或其他策略(对象重用)首先加载它们,静态方法而不是实例方法等等。
从他们的网站:“JVM Monitor不提供分析引用的能力,而是提供(原文如此)生成hprof文件的能力,以便您可以使用其他工具(如{)进一步分析引用{3}}“。我建议你查阅那里的文档,以及他们的Memory Analyzer。我会注意到有用于分析hprof文件的替代工具。