如何减少来自VisualVM的堆使用影响?

我试图优化我的应用程序的内存使用情况。 不幸的是,使用-Dcom.sun.management.jmxremote运行我的应用程序并通过VisualVM连接它对堆的使用有相当大的影响。 起初我认为这是我的应用程序问题,直到我编写了一个非常简单的程序来确认它确实是JMX的开销。 以下是该活动的图像。

读完这些之后,我明白这是由于VisualVM通过连续轮询连接的应用程序来检索数据的方式。 我通过查看VisualVM的内存采样器来证实这一点。 RMI TCP连接(n)线程分配180kb /秒。

我的问题是,有没有办法减少VisualVM的堆使用影响? 因为我对堆信息感兴趣,所以更改轮询间隔可能不太可取。 如果这是不可能的,我们可以排除用于VisualVM的数据吗? 至少我想更关注我的应用程序。

运行代码

Object object = new Object();
synchronized (object) {
    object.wait();
}

VisualVM的堆监视器活动

在这里输入图像描述


最简单的做法是减少轮询间隔。 影响与获取数据的速率成正比。

我所做的是使用YourKit,它在本机内存中执行所有操作,因此对堆没有影响。

链接地址: http://www.djcxy.com/p/14039.html

上一篇: How to reduce heap usage impact from VisualVM?

下一篇: how come Eclipse compiles this Java code but not Ant?