在eclipse中查看gcmv的堆使用量是多少?

时间:2016-02-05 08:58:33

标签: java eclipse garbage-collection jvm

当我在Eclipse中使用垃圾收集和内存可视化工具时,我不清楚我的应用程序实际需要多少内存。看看这张图: gcmv view

比如说0:12它已经获得了超过0.4 GB的数据。我知道它获得了比实际需要更多的堆(图中的堆大小)。但我想看到的是它真正使用了多少内存。另外两张图只是混淆了图片。我可以用gcmv吗?

1 个答案:

答案 0 :(得分:1)

问题没有明确的答案,使用了多少内存,因为这取决于使用的的定义。在某些时候,JVM将获取内存,应用程序将通过写入来使用内存,以便以后能够读取它。你可以说它只使用内存,只要稍后再访问该内存。如果你永远不会读取一个值,那么确实不需要保存该值的内存,但要确定应用程序是否会再次读取它是一个技术挑战。

预测以后是否存在访问权的一种方法是利用对象结构并将每个无法访问的对象视为未使用。这种分析称为垃圾收集,在某些时间点运行,因此在这些点上,我们经常会发现实际使用的内存小于应用程序在两次垃圾收集运行之间使用的内存。但是在这些点之间,没有关于可达对象的已用内存量的知识。

因此,您可以在图表中看到两个图形,一个表示应用程序在两个垃圾收集周期之间写入数据的内存,另一个表示垃圾收集后生成的仍然可访问的内存。假设所需的大小介于两者之间。对于任意时间点,较高的“收集前”值源于应用程序在没有垃圾收集的情况下使用它们的事实,但如果当时发生了垃圾收集,则实际使用(仍然可以达到的)内存可能低于那个,但不太可能低于“收集后”值(尽管即使这一点也不确定)。

当您想要安全时,确保始终至少与记录的“收集前”值一样多,并且应用程序应该像您记录的过程一样运行。但是,您可能会将可用内存减少到“收集前”和最大“收集后”值之间的值,并且仍然可以成功运行应用程序,但具有不同的垃圾收集周期,可能会花费更多的CPU时间进行垃圾回收。 / p>