ヒープダンプを取り、それらを保持しているオブジェクトを見つけます。どのオブジェクトが配列を保持しているかがわかれば、何がそれらを割り当てているかを簡単に理解できるはずです。
あなたの質問には答えませんが、私の質問は次のとおりです。
なんで気にするの?
jvm ガベージ コレクター (GC) に、最大 1 GB のメモリを使用できることを伝えました。Java は 250M 未満を使用しています。
GC は、いつガベージ コレクションを行うか、およびガベージ コレクションでどれだけハードに動作するかについて賢くしようとします。グラフでは、メモリの需要はありません。jvm は、設定した 1 GB の制限に近くありません。GC が非常に懸命に努力する必要がある理由はまったくわかりません。なぜあなたも気にするのかわかりません。
ガベージ コレクターが怠惰であることは良いことです。GC の動作が少ないほど、アプリケーションで使用できるリソースが増えます。
JVisualVM の [GC を実行] ボタンを使用して GC をトリガーしようとしましたか? そのボタンは、「世界を止める」ガベージ コレクション操作をトリガーする必要があります。グラフがこれらの鋸歯状の上昇の中間にあるときに試してみてください。もしそうなら、それはメモリのこぎり歯が単なるガベージの蓄積であり、GC が正しいことをしていることを証明しています。
これは、私が使用する Java swing アプリケーションのメモリ使用量のスクリーンショットです。
鋸歯状のパターンに注目してください。
あなたは int[] が心配だと言いました。メモリ プロファイラを起動してすべてをプロファイリングすると、int[] の割り当てが表示されます。
基本的に、すべての割り当ては ObjectOutputStream$HandleTable.growEntries メソッドから行われます。割り当てが行われたスレッドが、ネットワーク メッセージを処理するためにスピンアップしたようです。
jmx自体が原因だと思います。おそらくrmiによるものです(rmiを使用していますか?)。またはデバッガー (デバッガーが接続されていますか?)。