JVM Speichersegmentzuordnung
Okay, ich habe eine Frage zu den Speichersegmenten einer JVM. Ich weiß, dass jede JVM dies ein wenig anders implementieren würde, aber es ist ein Gesamtkonzept, das in allen JVMs gleich bleiben sollte.
Ein Standard-C / C ++ - Programm, das zur Laufzeit keine virtuelle Maschine verwendet, verfügt über vier Speichersegmente. Der Code / Stack / Heap / Data aller dieser Speichersegmente wird vom Betriebssystem zur Laufzeit automatisch zugewiesen.
enn eine JVM jedoch ein mit Java kompiliertes Programm ausführt, verfügt sie zur Laufzeit über 5 Speichersegment
Der Methodenbereich / Heap / Java Stacks / PC-Register / Native Stacks
Meine Frage ist, wer diese Speichersegmente zuweist und verwaltet. Das Betriebssystem ist sich NICHT bewusst, dass ein Java-Programm ausgeführt wird, und denkt, dass es Teil der JVM ist, die als reguläres Programm auf dem Computer ausgeführt wird. JIT-Kompilierung, Verwendung von Java-Stacks. Diese Vorgänge erfordern die Zuweisung von Laufzeitspeicher Unverständnis Ist, wie eine JVM ihren Speicher in diese Speichersegmente aufteilt. Es wird definitiv nicht vom Betriebssystem ausgeführt, und diese Speichersegmente (z. B. die Java-Stapel) müssen zusammenhängend sein, um zu funktionieren. Wenn das JVM-Programm also einfach einen Befehl wie malloc verwenden würde, um die maximale Größe von zu erhalten, muss dies der Fall sein Haufen Speicher und teilen Sie diese Speicher in Segmente, wir haben kein Versprechen für zusammenhängende Speicher, ich würde es lieben, wenn jemand mir helfen könnte, dies klar in meinem Kopf, es ist alles durcheinander ...