Java-Speicherpartitionierung:
Bei der Java-Speicherzuweisung unterteilt Java den Speicher in: Methodenbereich, Heap, Stapel virtueller Maschinen, lokaler Methodenstapel und Programmzähler. Der Methodenbereich und der Heap werden von allen Threads gemeinsam genutzt, während der Stapel der virtuellen Maschine, der lokale Methodenstapel und der Programmzähler threadisoliert sind. Jedes Gebiet hat seine eigene Entstehungs- und Zerstörungszeit.
Programmzähler:
Es wird als Zeilennummernindikator für die vom aktuellen Thread ausgeführten Bytes verwendet. Javas Multithreading wird durch abwechselndes Wechseln der Threads und Zuweisen von Prozessorausführungszeit implementiert. Damit jeder Thread nach dem Umschalten an die richtige Position zurückkehrt, benötigt jeder Thread einen unabhängigen Programmzähler.
Java Virtual Machine-Stack:
Bei jeder Ausführung wird gleichzeitig ein Stapelrahmen erstellt, in dem lokale Variablentabellen, Operandenstapel, dynamische Links, Methodenexits und andere Informationen gespeichert werden. Der virtuelle Speicherstapel wird oft als „Stapel“ bezeichnet. Der für die lokale Variablentabelle erforderliche Speicher wird zur Kompilierzeit zugewiesen.
Lokaler Methodenstapel:
Ähnlich wie beim Stapel der virtuellen Maschine besteht der Unterschied darin, dass der Stapel der virtuellen Maschine Java-Methodendienste für die virtuelle Maschine ausführt, während der lokale Methodenstapel die virtuelle Maschine mithilfe nativer Methoden bedient.
Java-Heap:
Wird von allen Programmen gemeinsam genutzt und beim Start der virtuellen Maschine erstellt. Dieser Speicherbereich wird zum Speichern von Objektinstanzen verwendet. Gemäß den Java Virtual Machine-Vorschriften kann sich der Java-Heap in einem physisch diskontinuierlichen Speicherbereich befinden, solange er logisch kontinuierlich ist.
Methodenbereich:
Dasselbe wie der Heap, der von Threads gemeinsam genutzt wird. Seine Funktion besteht darin, Daten wie Klasseninformationen, Konstanten, statische Variablen, vom Just-in-Time-Compiler kompilierter Code usw. zu speichern, die von der virtuellen Maschine geladen wurden.
Laufzeitkonstantenpool:
Ist Teil des Methodenbereichs. Seine Funktion besteht darin, verschiedene Literal- und Symbolreferenzen zu speichern, die während der Kompilierung generiert werden.