同じプロセスのマルチスレッド対マルチプロセスを実行する小さなJavaアプリケーションのメモリ占有量の違いを数値化しようとしています。Linux上で複数のプロセスでJVMメモリフットプリントを決定する方法
私のテストはすべてLinuxで行われています。
マルチスレッドで実行している場合、全体のフットプリントとスレッドごとの追加オーバーヘッドを判断するのは比較的簡単です。シングルスレッドプロセスを実行する場合、JVMはpmapに従って大きなフットプリント(200〜300Mの仮想空間)を持ちます。同じアプリの複数のコピーを実行すると、メモリフットプリントx Nが表示され、プロセス間で共有されるjavaコードはありません。
Javaコードは実行可能ではないバイトコードであるため、Cバイナリと同じようにプロセス間でコードを共有しないことが通知されています。しかし、私はその後、同じことを達成するためにCopy-On-Write技術を使用する可能性があることを知らされました。 pmapを使用すると、プロセスのフットプリントがわかり、他のプロセスとどれだけ共有できるかはわかりません。
問題は、どのくらいのデータがプロセス間でコピーオンライトを介して共有されるかを判断することです。