2009-08-25 23 views
4

Ich versuche, zu quantifizieren, den Unterschied in Speicherbedarf eines kleinen Java-Anwendung Durchführung des gleichen Prozesses vs Multi-Prozess-multithreaded zu bestimmen.Wie JVM Speicherbedarf mit mehreren Prozessen auf Linux

Alle meine Tests sind unter Linux.

Wenn multithreaded ausgeführt wird, ist es relativ einfach, die Gesamtgrundfläche und zusätzlichen Aufwand pro Thread zu bestimmen. Beim Ausführen des Single-Thread-Prozesses hat die JVM gemäß pmap eine große Grundfläche (200-300 M virtueller Raum). Wenn ich mehrere Kopien der gleichen App ausführen, sehe ich den Speicherabdruck x N und keiner der Java-Code wird zwischen Prozessen geteilt.

Ich wurde darüber informiert, dass seit dem Java-Code-Bytecode ist, nicht ausführbar, es nicht Code zwischen Prozessen nicht teilt, wie Sie es mit sagen C-Binärdateien. Ich wurde jedoch später informiert, dass es die Copy-On-Write-Technologie verwenden könnte, um dasselbe zu erreichen. Wenn ich pmap verwende, sagt es mir nur den Footprint für den Prozess und gibt nicht an, wie viel mit einem anderen Prozess geteilt werden darf.

Die Frage ist also: Wie würde ich, wie viele Daten bestimmen über Copy-on-Write zwischen Prozessen geteilt wird?

Antwort

-3

Auf einem korrekt konfigurierten nicht eingebetteten Linux-System, warum sollten Sie sich um den Speicherbedarf kümmern?

Welchen Unterschied würde es machen, wenn Sie eine Antwort hätten?

Daten würden nur zwischen Prozessen geteilt, wenn einer der Vorfahre des anderen war.
Und es würde weiter durch das Speicherlayout des Java-Programms und Daten innerhalb der Seiten bestimmt werden. All dies könnte sich von Release zu Release ändern.