java - 在 Eclipse 中查看 gcmv 使用的堆数量?

标签 java eclipse garbage-collection jvm

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

在 0:12 时,它已获取了略多于 0.4 GB 的空间。我知道它获取的堆(图中的堆大小)比实际需要的多。但我想看看它到底使用了多少内存。另外两张图只是混淆了图片。我可以在 gcmv 中做到这一点吗?

最佳答案

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

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

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

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

关于java - 在 Eclipse 中查看 gcmv 使用的堆数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35219963/

相关文章:

c# - java 的 -verbose :gc command line option 的 .NET 等价物是什么

performance - GHC 的垃圾收集 RTS 选项

java - 程序在 Eclipse 中编译,但不在命令提示符中编译

java - 为什么在这个多线程程序中没有同步访问synchronized方法呢?

java - java中终止一个线程有一点问题

java - 有没有办法在 webflux 代码中等待异步方法结果

android - 我在哪里可以下载 Eclipse Android 包?

java - 导出应用程序时使用权限消失

java - 它是否有助于 GC 使 Java 中的局部变量为空

java - 在Java中使用Gson将 'null'开头的String[Youtube v3 api response]转换为JsonObject