Heim > 类库下载 > java类库 > Hauptteil

Werden statische Mitgliedsvariablen in Java im Heap- oder Stapelspeicher abgelegt?

高洛峰
Freigeben: 2016-10-13 15:25:49
Original
2264 Leute haben es durchsucht

Heap-Bereich:

1. Alle Objekte werden gespeichert und jedes Objekt enthält Informationen über eine entsprechende Klasse. (Der Zweck der Klasse besteht darin, Betriebsanweisungen zu erhalten)
2.jvm verfügt nur über einen Heap-Bereich (Heap), der von allen Threads gemeinsam genutzt wird. Grundtypen und Objektreferenzen werden nicht im Heap gespeichert, sondern nur das Objekt selbst.
Stapelbereich:
1. Jeder Thread enthält einen Stapelbereich. Nur Objekte grundlegender Datentypen und Verweise auf benutzerdefinierte Objekte (keine Objekte) werden im Heap-Bereich gespeichert.
2. Der Die Daten in jedem Stapel (ursprüngliche Typen und Objektreferenzen) sind privat und können von anderen Stapeln nicht aufgerufen werden.
3. Der Stapel ist in drei Teile unterteilt: Basistyp-Variablenbereich, Ausführungsumgebungskontext und Betriebsanweisungsbereich (Speicherbetriebsanweisungen).
Methodenbereich:
1. Wird auch als statischer Bereich bezeichnet und wird wie der Heap von allen Threads gemeinsam genutzt. Der Methodenbereich enthält alle Klassen- und statischen Variablen.

2. Der Methodenbereich enthält Elemente, die im gesamten Programm immer eindeutig sind, wie z. B. Klassen- und statische Variablen.


Wenn das Programm läuft, sollten wir besser wissen, wo wir die Daten speichern sollen. Besonderes Augenmerk sollte auf die interne Zuordnung gelegt werden. Es gibt sechs Orte, an denen Daten gespeichert werden können:

1. Dies ist der schnellste Speicherbereich, da er sich an einem anderen Ort als alle anderen Speicherungen befindet: im Prozessor. Da die Anzahl der Register jedoch sehr begrenzt ist, werden die Register vom Compiler nach Bedarf zugewiesen. Wir haben hierauf keinen direkten Einfluss und es ist unmöglich, in unseren eigenen Programmen Hinweise auf die Existenz von Registern zu finden.
2. Stapel. Befindet sich im regulären RAM-Bereich (Random Access Memory). Über seinen „Stapelzeiger“ ist jedoch eine direkte Unterstützung der Verarbeitung möglich. Wenn Sie den Stapelzeiger nach unten bewegen, wird neuer Speicher erstellt. Wenn Sie ihn nach oben bewegen, wird dieser Speicher freigegeben. Dies ist nach Registern eine besonders schnelle und effiziente Art der Datenspeicherung. Beim Erstellen eines Programms muss der Java-Compiler die „Länge“ und „Existenzzeit“ aller im Stack gespeicherten Daten genau kennen. Dies liegt daran, dass der entsprechende Code generiert werden muss, um den Zeiger nach oben und unten zu bewegen. Diese Einschränkung wirkt sich zweifellos auf die Flexibilität des Programms aus. Obwohl einige Java-Daten auf dem Stapel gespeichert werden – insbesondere Objekthandles –, werden Java-Objekte nicht darin platziert.
3. Haufen. Ein Allzweck-Speicherpool (auch ein RAM-Bereich), in dem Java-Objekte gespeichert werden. Im Gegensatz zum Stapel: Das Reizvollste am „Speicherheap“ oder „Heap“ ist, dass der Compiler nicht wissen muss, wie viel Speicherplatz er vom Heap zuweisen muss und auch nicht, wie lange die gespeicherten Daten im Heap verbleiben. Daher erhalten Sie eine größere Flexibilität bei der Verwendung des Heaps zum Speichern von Daten. Wenn Sie ein Objekt erstellen müssen, müssen Sie nur den neuen Befehl verwenden, um den entsprechenden Code zu kompilieren. Wenn diese Codes ausgeführt werden, werden die Daten automatisch im Heap gespeichert. Um diese Flexibilität zu erreichen, müssen Sie natürlich einen bestimmten Preis zahlen: Die Zuweisung von Speicherplatz im Heap dauert länger
4. Statischer Speicher. „Statisch“ bedeutet hier „an einer festen Stelle angeordnet“. Während das Programm läuft, warten statisch gespeicherte Daten darauf, jederzeit abgerufen zu werden. Mit dem Schlüsselwort static können Sie angeben, dass ein bestimmtes Element eines Objekts statisch ist. Das Java-Objekt selbst wird jedoch niemals im statischen Speicherplatz abgelegt.
5. Ständige Lagerung. Konstante Werte werden normalerweise direkt im Programmcode platziert. Dies ist sicher. Da sie sich nie ändern, müssen einige Konstanten streng geschützt werden. Erwägen Sie daher, sie im Nur-Lese-Speicher (ROM) abzulegen.
6. Nicht-RAM-Speicher. Wenn die Daten völlig unabhängig von einem Programm sind, können sie vorhanden sein, wenn das Programm nicht ausgeführt wird und außerhalb der Kontrolle des Programms liegt. Zwei der wichtigsten Beispiele sind „Streaming-Objekte“ und „Feste Objekte“. Bei Streaming-Objekten wird das Objekt in einen Bytestrom umgewandelt, der normalerweise an einen anderen Computer gesendet wird, während bei festen Objekten das Objekt auf der Festplatte gespeichert wird. Selbst wenn das Programm beendet wird, können sie ihren Zustand beibehalten. Ein besonders nützlicher Trick für diese Arten der Datenspeicherung besteht darin, dass sie auf anderen Medien vorhanden sein und bei Bedarf sogar in regulären, RAM-basierten Objekten wiederhergestellt werden können.


Erstens gibt es in Java kein Konzept für statische Variablen. Wenn Sie mir nicht glauben, können Sie ein statisches int i = 0 definieren die Methode; in Java gibt es nur statische Membervariablen. Es ist eine Eigenschaft der Klasse. Und wo hat er es hingelegt? Wovon ich oben spreche, ist der statische Bereich. Ich weiß nicht, ob es eine solche Übersetzung gibt. Wenn Sie jedoch tief in die JVM eintauchen, wird sie in den Methodenbereich übersetzt. Die Architektur der virtuellen Maschine: Heap, Methodenbereich, lokaler Methodenstapel, PC-Register. Der Methodenbereich speichert die Vorlage einer Klasse und der Heap enthält Instanzen der Klasse. Der Stapel wird im Allgemeinen für Funktionsberechnungen verwendet. Suchen Sie einfach nach einem Buch über die Grundlagen des Computers und Sie werden es wissen. Die Daten auf dem Stapel werden nach Ausführung der Funktion nicht gespeichert. Deshalb sind lokale Variablen jedes Mal gleich. Selbst nachdem Sie eine hinzugefügt haben, ist sie bei der nächsten Ausführung der Funktion immer noch dieselbe.



Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!