Java のマルチスレッド エコー サーバー用の単純なコードがあります (受信したものをクライアントに返します)。非ヒープメモリ使用量を含むさまざまなリソースをプロファイリングしています。JVMの非ヒープメモリもJVMの起動時に作成されることを理解していますが、クラスごとの構造を保存し、コールスタック、ネイティブコードによって割り当てられたメモリ(オフヒープキャッシングなど)、メタスペース、およびメモリを含みますJIT コンパイラ (コンパイルされたネイティブ コード) によって使用されます。しかし、主な質問が 2 つあります。
1) 非ヒープ メモリの使用量は、時間の経過とともにわずかに増加します。わずかな増加ですが、このメモリ使用量のわずかな増加の原因は何ですか?
2) 通信するクライアントの数が増加しても非ヒープ メモリの使用量はほぼ同じですが、大きく拡大すると、同様に、クライアントの数が増加するにつれてわずかに増加することがわかります。その主な理由は何ですか?新しいスレッドに必要なスペースが増えたことが原因かもしれないと推測していましたが、これらのスレッドは何を行ってこのわずかな増加を引き起こしているのでしょうか?
3) ヒープ メモリについても、上記 2 と同じ違いが見られます。ただし、違いははるかに大きいです。その理由は何ですか?私の推測では、メッセージの保存に必要なバッファー サイズが増加しました。