我使用NetBeans和VisualVM运行内存Profiler并收到了结果但是没有线索如何分析其结果,我研究了这个article但它没有教导或提供如何解释结果的线索。
我也发现这个article关于Netbeans 4上的解释结果,但我正在寻找一篇包含更多细节的文章,或者是一种解释以下结果的方法。
答案 0 :(得分:8)
您在问题中粘贴的遥测图表中传达的信息确实不多。
传达的内容
我敢打赌,在内存可视化器中传达的锯齿图案是你的程序启动 - 否则为什么在最后一刻左右其他东西看起来很平滑。您的申请是否在您的问题中显示的3分钟内处于任何负荷状态?
作为一个起点,我会看一下你的程序花在GC上的时间(GC的相对时间),当你的程序正在进行一些繁重的工作时。如果它超过5%,您可以考虑调整堆或进一步挖掘以找出分配的位置。
接下来我会寻找瓶颈。找出您的应用程序花费大部分时间的位置,看看您是否可以以某种方式优化该代码。
答案 1 :(得分:6)
我对netbeans中的profiler知之甚少,但我更喜欢visualvm
。它具有广泛的分析。 https://visualvm.java.net/
VisualVM是一个集成了多个命令行JDK工具和轻量级分析功能的可视化工具。专为生产和开发时使用而设计,它进一步增强了Java SE平台的监控和性能分析功能
内存测试示例程序
public class MemoryTest {
public static void main(String[] args) {
ArrayList<String> temp = new ArrayList<String>();
for (int i = 0; i < 1000000; i++) {
temp.add(String.valueOf(i));
System.out.println("index:" + temp.get(i));
}
System.out.println(temp.size());
}
}
打开visualvm
。它会在左侧列出你的程序。同时为您提供多种选项,以针对Memory
和CPU
测试您的计划。您还可以使用它来分析特定包。
答案 2 :(得分:2)
此条目并非特定于Netbeans 7,但在JVM内存使用和分析基础知识方面确实有一些很好的简单启动器。有时,对基础知识的更好理解揭示了更好的编程技术,以避免将来的内存问题。 http://java.dzone.com/articles/java-memory-model-simplified
答案 3 :(得分:2)
在Netbeans Profiler上找到好文章真的很难。我发现this link很有帮助。
以上三张图的摘要如下:
图表(1) 在第一个图中,第一个图中的红色阴影表示JVM堆的已分配大小,而紫色叠加表示实际使用的堆空间量。在这张图片中,分配的堆大小约为450 MB,其中140 MB用于保存 java对象。
图表(2) 第二张图显示了堆统计信息
图表(3) 第3个图显示了JVM中活动线程的数量。 线程活动计数的过多变化会占用CPU(上下文切换)。
答案 4 :(得分:0)