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