我使用JDK 1.7
监控我的Java应用程序(用VisualVM
编写)。以下是显示此应用程序运行的持续时间内堆内存使用情况的图表。
看一下这个图表,看到它有很多尖峰。这些峰值表示应用程序创建对象。一旦应用程序完成它们就会使用gc销毁它们(在本例中隐式调用)。
此外,这是应用程序仍在运行时内存分析器的屏幕截图
对我来说,图的上下性质表明了java对象的有效使用。这是推论吗?
人们应该瞄准的堆使用率图的理想性质是什么?
还有其他方法可以改善我的应用程序的堆内存使用情况吗?
答案 0 :(得分:3)
对我来说,图的上下性质表明了java对象的有效使用。这是推论吗?
我会说它有效地使用了垃圾收集器。我建议创建更少的对象可能更有效。
人们应该瞄准的堆使用图的理想特性是什么?
这取决于您的申请。我倾向于瞄准几乎完全平坦的那个。
我的应用程序是否有其他方法可以改善堆内存使用情况?
载荷
在您的情况下,最好的选择是减少您生产的垃圾量。
答案 1 :(得分:1)
只要堆大小随着时间的推移保持几乎相同,你就可以了。由于在Sun JVM中暂停世界gc的性质,使用的堆应该上下移动。看起来在您的应用程序中生成了许多短期对象,它可能效率低下,但有时您需要创建它们。这是Java的生活方式:D