Heim  >  Artikel  >  Java  >  15.Java-Grundlagen – Heap & Stack

15.Java-Grundlagen – Heap & Stack

黄舟
黄舟Original
2017-02-27 10:55:591253Durchsuche

Grundkonzepte

In Java gibt es sechs verschiedene Orte, an denen Daten gespeichert werden können.


1. Register

ist der schnellste Speicherbereich, da er sich im Inneren des Prozessors befindet nicht kontrollieren kann.


2. Stack

ist ein Stack, der sich im Allzweck-RAM befindet. Es liegt nach Registern an zweiter Stelle in der Speichergeschwindigkeit. Nadel.

Es hat die folgenden Eigenschaften:

  • Speicher über den Stapelzeiger steuern. Wenn Sie nach unten gehen, wird neuer Speicher zugewiesen; wenn Sie nach oben gehen, wird dieser Speicher freigegeben. Beim Erstellen eines Programms muss der Java-Compiler also die genaue Größe und Lebensdauer aller auf dem Stapel gespeicherten Daten kennen, da er den entsprechenden Code generieren muss, um den Stapelzeiger nach oben und unten zu bewegen

  • Stapelspeicher gehört zu einem einzelnen Thread. Jeder Thread verfügt über einen Stapelspeicher, und die von ihm gespeicherten Variablen können nur in dem Thread sichtbar sein, zu dem er gehört. Das heißt, der Stapelspeicher kann als privater Speicher des Threads verstanden werden.

  • Datenaustausch im Stapel.

  • speichert Verweise auf Grundtypen variabler Daten, Objekte oder Arrays . Das Objekt selbst wird jedoch nicht auf dem Stapel gespeichert, sondern auf dem Heap (neu erstellte Objekte) oder im Konstantenpool (String-Konstantenobjekte werden im Konstantenpool gespeichert).

  • Verfügt über eine FILO-First-In-Last-Out-Regel.


3. Heap

ist ein Allzweck-Speicherpool (existiert auch im RAM). Wird zum Speichern aller Java-Objekte verwendet. Laienhaft ausgedrückt bedeutet dies, alle neuen Objekte zu speichern.

Der Unterschied zwischen dem Heap und dem Stack besteht darin, dass er eine große Flexibilität bei der Speicherzuweisung bietet, aber auch länger dauert. Denn:

  • Der Compiler muss nicht wissen, wie viel Speicherbereich er vom Heap zuweisen muss.

  • Der Compiler muss auch nicht wissen, wie lange die gespeicherten Daten im Heap verbleiben.

Wenn Sie ein Objekt erstellen müssen, müssen Sie nur eine einfache Codezeile schreiben. Wenn diese Codezeile ausgeführt wird, wird der Speicher automatisch im Heap zugewiesen.


4. Der Methodenbereich

wird zum Speichern geladener Klasseninformationen, Konstanten, statischer Variablen und vom Just-in-Time-Compiler kompilierter Code verwendet.


5. Konstanter Pool

Der Konstantenpool ist Teil des Methodenbereichs.

Speichert String-Konstanten und grundlegende Typvariablen, wie z. B. String str="www". Tatsächlich befindet sich „www“ im Konstantenpool.

Die 8 Grundtypen von Java (Byte, Short, Integer, Long, Character, Boolean, Float, Double) implementieren alle anderen sechs Typen konstante Pools, aber sie sind nur in (-). 128 <= value<=127) verwendet den Konstantenpool. Außerhalb dieses Bereichs wird der Konstantenpool nicht verwendet und Objekte werden direkt im Heapspeicher erstellt.

Grundlegende Konzepte

In Java gibt es sechs verschiedene Orte, an denen Daten gespeichert werden können.


1. Register

ist der schnellste Speicherbereich, da er sich im Inneren des Prozessors befindet nicht kontrollieren kann.


2. Stack

ist ein Stack, der sich im Allzweck-RAM befindet. Es liegt nach Registern an zweiter Stelle in der Speichergeschwindigkeit. Nadel.

Es hat die folgenden Eigenschaften:

  • Speicher über den Stapelzeiger steuern. Wenn Sie nach unten gehen, wird neuer Speicher zugewiesen; wenn Sie nach oben gehen, wird dieser Speicher freigegeben. Beim Erstellen eines Programms muss der Java-Compiler also die genaue Größe und Lebensdauer aller auf dem Stapel gespeicherten Daten kennen, da er den entsprechenden Code generieren muss, um den Stapelzeiger nach oben und unten zu bewegen

  • Stapelspeicher gehört zu einem einzelnen Thread. Jeder Thread verfügt über einen Stapelspeicher, und die von ihm gespeicherten Variablen können nur in dem Thread sichtbar sein, zu dem er gehört. Das heißt, der Stapelspeicher kann als privater Speicher des Threads verstanden werden.

  • Datenaustausch im Stapel.

  • speichert Verweise auf Grundtypen variabler Daten, Objekte oder Arrays . Das Objekt selbst wird jedoch nicht auf dem Stapel gespeichert, sondern auf dem Heap (neu erstellte Objekte) oder im Konstantenpool (String-Konstantenobjekte werden im Konstantenpool gespeichert).

  • Verfügt über eine FILO-First-In-Last-Out-Regel.


3. Der Heap ist ein Allzweck-Speicherpool (existiert auch im RAM). Wird zum Speichern aller Java-Objekte verwendet. Für den Laien geht es darum, alle neuen Objekte zu speichern.

Der Unterschied zwischen dem Heap und dem Stack besteht darin, dass er eine große Flexibilität bei der Speicherzuweisung bietet, aber auch länger dauert. Denn:

Der Compiler muss nicht wissen, wie viel Speicherbereich er vom Heap zuweisen muss.
  • Der Compiler muss auch nicht wissen, wie lange die gespeicherten Daten im Heap verbleiben.
  • Wenn Sie ein Objekt erstellen müssen, müssen Sie nur eine einfache Codezeile schreiben. Wenn diese Codezeile ausgeführt wird, wird der Speicher automatisch im Heap zugewiesen.

4. Der Methodenbereich

wird zum Speichern geladener Klasseninformationen, Konstanten, statischer Variablen und vom Just-in-Time-Compiler kompilierter Code verwendet.

5. Konstanter Pool

Der Konstantenpool ist Teil des Methodenbereichs.

Speichert String-Konstanten und grundlegende Typvariablen, wie zum Beispiel String str="www". Tatsächlich befindet sich „www“ im Konstantenpool.

Die 8 Grundtypen von Java (Byte, Short, Integer, Long, Character, Boolean, Float, Double) implementieren alle anderen sechs Typen konstante Pools, aber sie sind nur in (-). 128 <= value<=127) verwendet den Konstantenpool. Außerhalb dieses Bereichs wird der Konstantenpool nicht verwendet und Objekte werden direkt im Heap-Speicher erstellt.

Das Obige ist der Inhalt von 15.Java Basics – Heap & Stack. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn