代码之家  ›  专栏  ›  技术社区  ›  Björn Pollex

解释VisualVM分析会话的结果

  •  0
  • Björn Pollex  · 技术社区  · 14 年前

    我有一个应用程序,它使用 this

    1. 如果我在开始时使用 System.in.read() ,进程分配的内存继续缓慢增长。为什么?
    2. 当应用程序运行时,VisualVM监视器中使用的堆空间总是在80mb左右。但是,在分析内存使用情况时,我得到的内存总量约为10mb。有人能解释一下这种区别吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Community CDub    7 年前

    内存使用中的jigsaw模式是由于分析结果通过RMI传输的。这确实是非常混乱和恼人的过滤从实际内存分配由您的程序。见 VisualVM profiling is polluting results

        2
  •  0
  •   Matt Ball    12 年前

    关于你的第一个问题,你观察了多长时间的缓慢增长。当Java进程中的内存使用处于静止状态时,通常会看到锯齿模式的发展。你看到在同一时间段内有GC发生吗?如果没有,那就有更多的证据支持这个观点。

    对于第二个问题,没有更多的信息很难说清楚。当分析打开时,您通常希望应用程序的行为有所不同,因为计时窗口发生变化,应用程序必须花时间报告数据 执行正常工作等。这可能是因为打开分析时,会发生更多的内存分配,因为您的代码现在被检测,这会触发GC,从而降低堆使用率。尝试在分析关闭时在应用程序中执行System.gc(),并告诉我们堆使用情况报告。