アプリケーションのメモリ使用量を最適化しようとしています。残念ながら、アプリケーションを -Dcom.sun.management.jmxremote で実行し、VisualVM 経由で接続すると、ヒープの使用量に大きな影響があります。最初は自分のアプリケーションの問題だと思っていましたが、実際に JMX のオーバーヘッドであることを確認するための非常に単純なプログラムを作成しました。以下、活動イメージです。
これを読んだ後、これは VisualVM がデータを取得する方法によるものであることがわかりました。これは、接続されたアプリケーションを継続的にポーリングすることによって行われます。VisualVM のメモリ サンプラーを見て、これを確認しました。RMI TCP Connection(n) スレッドは 180kb/秒を割り当てています。
私の質問は、VisualVM のヒープ使用量の影響を軽減する方法はありますか? ヒープ情報に興味があるので、ポーリング間隔を変更することは好ましくないかもしれません。これが不可能な場合、VisualVM に使用されるデータを除外できますか? 少なくとも、自分のアプリケーションにもっと集中したいと思っています。
コードの実行
Object object = new Object();
synchronized (object) {
object.wait();
}
VisualVM のヒープ モニター アクティビティ