【发布时间】: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