【问题标题】:JProfiler reporting allocations of Long's in Object.wait()JProfiler 在 Object.wait() 中报告 Long 的分配
【发布时间】:2013-07-11 19:25:40
【问题描述】:

我正在使用 JProfiler 7.2.3 在运行 JRE 1.6.0_51 (amd64) 的进程中调试内存泄漏:

$ java -version
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)

JProfiler 的分配调用树显示在Object.wait 和sun.misc.Unsafe.park 中分配的java.lang.Long 对象。我深入研究了 JVM 源代码,并没有发现那里有任何内存分配。有人对此有任何见解吗?

在这里你可以看到 JProfiler 通过Object.wait 报告对象分配:

sun.misc.Unsafe.park:

【问题讨论】:

  • 您使用采样还是仪器?
  • 采用默认设置的采样模式。
  • 我猜这是 long 自动装箱成 Long 并且很可能是当前时间,因为这对等待很有用。
  • 我在 cpp 源代码中没有看到任何 Longs 分配。请注意,JProfiler 会在本机方法中报告分配情况:public final native void wait(long timeout) throws InterruptedException; Any Long 在调用 wait 之前分配的将显示在父调用方节点中。
  • 等待中没有分配,这是由于采样不准确,我刚刚添加了这个作为答案。

标签: java memory-leaks jprofiler


【解决方案1】:

当您使用采样时,调用堆栈只是近似值。

要获得准确的调用堆栈,请使用检测。

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2013-10-20
    • 2013-01-22
    相关资源
    最近更新 更多