VisualVM:理想的堆内存使用图

时间:2014-10-09 16:11:36

标签: java performance heap-memory visualvm

我使用JDK 1.7监控我的Java应用程序(用VisualVM编写)。以下是显示此应用程序运行的持续时间内堆内存使用情况的图表。

enter image description here

看一下这个图表,看到它有很多尖峰。这些峰值表示应用程序创建对象。一旦应用程序完成它们就会使用gc销毁它们(在本例中隐式调用)。

此外,这是应用程序仍在运行时内存分析器的屏幕截图

enter image description here

对我来说,图的上下性质表明了java对象的有效使用。这是推论吗?

人们应该瞄准的堆使用率图的理想性质是什么?

还有其他方法可以改善我的应用程序的堆内存使用情况吗?

2 个答案:

答案 0 :(得分:3)

  

对我来说,图的上下性质表明了java对象的有效使用。这是推论吗?

我会说它有效地使用了垃圾收集器。我建议创建更少的对象可能更有效。

  

人们应该瞄准的堆使用图的理想特性是什么?

这取决于您的申请。我倾向于瞄准几乎完全平坦的那个。

  

我的应用程序是否有其他方法可以改善堆内存使用情况?

载荷

  • 减少垃圾。使用内存分析器找出创建垃圾的位置。
  • 使堆更大,因此它不经常使用GC。
  • 将您保留的数据从堆中移出(您似乎没有很多)

在您的情况下,最好的选择是减少您生产的垃圾量。

答案 1 :(得分:1)

只要堆大小随着时间的推移保持几乎相同,你就可以了。由于在Sun JVM中暂停世界gc的性质,使用的堆应该上下移动。看起来在您的应用程序中生成了许多短期对象,它可能效率低下,但有时您需要创建它们。这是Java的生活方式:D