Heim Java JavaBase Der Unterschied zwischen Heap- und Stack-Java

Der Unterschied zwischen Heap- und Stack-Java

Nov 13, 2019 pm 02:32 PM
java 区别 堆栈

Der Unterschied zwischen Heap- und Stack-Java

Der Unterschied zwischen Heap und Stack Java

Bevor wir über Heap und Stack sprechen, sprechen wir über JVM (virtuell). Speicheraufteilung der Maschine:

Java-Programme müssen Speicherplatz zuweisen, wenn sie ausgeführt werden. Die Java Virtual Machine muss auch Speicherplatz zuweisen, wenn sie ausgeführt wird. Die JVM öffnet einen Speicherbereich im Speicher, wenn sie ausgeführt wird, und teilt ihn beim Start sorgfältiger in ihren eigenen Speicherbereich auf. Da jeder Speicherbereich in der virtuellen Maschine auf unterschiedliche Weise verarbeitet wird, muss er separat verwaltet werden .

Der JVM-Speicher ist in fünf Teile unterteilt:

1. Lokaler Methodenbereich; >3. Methodenbereich;

4.

Konzentrieren wir uns auf den Heap und den Stack:

Stapelspeicher: Der Stapelspeicher ist zunächst ein Speicherbereich, der lokale Variablen speichert, die alle in Methoden definiert sind. Alle sind lokale Variablen (Globale Variablen außerhalb der Methode). Lokale Variablen müssen auch innerhalb der for-Schleife definiert werden, bevor lokale Variablen definiert werden können. Daher stapelt die Methode zuerst die Variablen Gültigkeitsbereich wird die Variable freigegeben, sobald sie den Gültigkeitsbereich verlässt. Der Stapelspeicher wird sehr schnell aktualisiert, da lokale Variablen einen kurzen Lebenszyklus haben.

Heap-Speicher: Speichert Arrays und Objekte (eigentlich sind Arrays alles, was im Heap erstellt wurde). Entitäten werden zum Kapseln von Daten verwendet (Mehrere Attribute einer Entität). Wenn ein Datenelement verschwindet, ist die Entität nicht verschwunden und kann weiterhin verwendet werden. Der Stapel speichert jedoch nur ein einziges Variable. Sobald die Variable freigegeben wird, ist sie verschwunden. Obwohl die Entitäten im Heap nicht freigegeben werden, werden sie als Müll behandelt. Java verfügt über einen Garbage-Collection-Mechanismus, um sie von Zeit zu Zeit zu sammeln.

Lassen Sie uns anhand einer Illustration ausführlich über Heap und Stack sprechen:

Zum Beispiel die Anweisung in der Hauptfunktion int [] arr=new int [3] ; im Speicher Wie es definiert ist:

Die Hauptfunktion geht zuerst zum Stapel, definiert eine Variable arr im Stapel und weist dann arr einen Wert zu, aber die rechte Seite ist kein bestimmter Wert, sondern eine Entität. Die Entität wird im Heap durch das neue Schlüsselwort erstellt. Wenn der Speicher Daten speichert, wird die Adresse als kontinuierliche Binäradresse angezeigt die Entität. Arrays haben einen Index, nachdem die Array-Entität im Heap-Speicher generiert wurde. Jeder Speicherplatz wird standardmäßig initialisiert (dies ist ein Merkmal des Heap-Speichers). Nicht initialisierte Daten können nicht verwendet werden, sie können jedoch im Heap verwendet werden. Weil dies der Fall ist initialisiert, aber nicht auf dem Stapel), verschiedene Typen haben unterschiedliche Initialisierungswerte. So werden Variablen und Entitäten im Heap und Stack erstellt:

Wie sind also Heap und Stack verbunden?

Wir haben gerade sagte, dass wir dem Heap eine Adresse zuweisen, die Adresse des Heaps arr zuweisen und arr über die Adresse auf das Array verweisen. Wenn arr also das Array manipulieren möchte, verwendet es die Adresse, anstatt ihm Entitäten direkt zuzuweisen. Wir nennen dies nicht mehr einen Basisdatentyp, sondern einen Referenzdatentyp. Es heißt arr und bezieht sich auf die Entität im Heap-Speicher. (Kann als Zeiger auf C oder C++ verstanden werden, Java ist aus C++ hervorgegangen und C++ ist sehr ähnlich, optimiertes C++) Der Unterschied zwischen Heap- und Stack-Java

If when int [] arr=null;

arr zeigt auf nichts und die Funktion von null besteht darin, den Zeiger des Datentyps zu dereferenzieren.

Wenn ein Referenzdatentyp nicht auf eine Entität verweist, wird sie nicht im Heapspeicher freigegeben, sondern als Müll behandelt und zu unregelmäßigen Zeiten automatisch recycelt, da Java über einen automatischen Recyclingmechanismus verfügt. (C++ tut dies nicht und erfordert vom Programmierer eine manuelle Wiederverwendung. Wenn es nicht wiederverwendet wird, wächst der Heap, bis er voll ist und der Speicher überläuft, sodass Java bei der Speicherverwaltung besser als C++ ist.) Der automatische Recyclingmechanismus (Programm) überwacht automatisch, ob sich Müll im Heap befindet. Wenn ja, führt er automatisch eine Müllsammlung durch, es ist jedoch nicht sicher, wann er gesammelt wird. Der Unterschied zwischen Heap- und Stack-Java

Der Unterschied zwischen Heap und Stack ist offensichtlich:

1. Der Stapelspeicher speichert lokale Variablen, während der Heapspeicher Entitäten speichert Der Speicher wird schneller aktualisiert als der Heap-Speicher, da der Lebenszyklus lokaler Variablen sehr kurz ist.

3. Im Stapelspeicher gespeicherte Variablen werden freigegeben, sobald ihr Lebenszyklus endet, während im Heap-Speicher gespeicherte Entitäten gesammelt werden von Zeit zu Zeit durch den Garbage-Collection-Mechanismus.

php Chinesische Website, eine große Anzahl kostenloser Java-Einführungs-Tutorials

, willkommen zum Online-Lernen!

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Heap- und Stack-Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind die grundlegenden Anforderungen für C -Sprachfunktionen? Was sind die grundlegenden Anforderungen für C -Sprachfunktionen? Apr 03, 2025 pm 10:06 PM

C -Sprachfunktionen sind die Grundlage für die Code -Modularisierung und das Programmaufbau. Sie bestehen aus Deklarationen (Funktionsüberschriften) und Definitionen (Funktionskörper). C Sprache verwendet standardmäßig Werte, um Parameter zu übergeben, aber externe Variablen können auch mit dem Adresspass geändert werden. Funktionen können oder haben keinen Rückgabewert, und der Rückgabewerttyp muss mit der Deklaration übereinstimmen. Die Benennung von Funktionen sollte klar und leicht zu verstehen sein und mit Kamel oder Unterstrich die Nomenklatur. Befolgen Sie das Prinzip der einzelnen Verantwortung und behalten Sie die Funktion ein, um die Wartbarkeit und die Lesbarkeit zu verbessern.

Der Unterschied zwischen H5- und Miniprogramm und Apps Der Unterschied zwischen H5- und Miniprogramm und Apps Apr 06, 2025 am 10:42 AM

H5. Der Hauptunterschied zwischen Mini -Programmen und App ist: Technische Architektur: H5 basiert auf Web -Technologie, und Mini -Programme und Apps sind unabhängige Anwendungen. Erfahrung und Funktionen: H5 ist leicht und einfach zu bedienen, mit begrenzten Funktionen; Mini -Programme sind leicht und haben eine gute Interaktivität. Apps sind leistungsstark und haben reibungslose Erfahrung. Kompatibilität: H5 ist plattformübergreifend, Applets und Apps werden von der Plattform eingeschränkt. Entwicklungskosten: H5 verfügt über niedrige Entwicklungskosten, mittlere Mini -Programme und die höchste App. Anwendbare Szenarien: H5 eignet sich für Informationsanzeigen, Applets eignen sich für leichte Anwendungen und Apps eignen sich für komplexe Funktionen.

Was sind die Unterschiede und Verbindungen zwischen C und C#? Was sind die Unterschiede und Verbindungen zwischen C und C#? Apr 03, 2025 pm 10:36 PM

Obwohl C und C# Ähnlichkeiten haben, sind sie völlig unterschiedlich: C ist eine prozessorientierte, manuelle Speicherverwaltung und plattformabhängige Sprache, die für die Systemprogrammierung verwendet wird. C# ist eine objektorientierte, Müllsammlung und plattformunabhängige Sprache, die für Desktop-, Webanwendungs- und Spielentwicklung verwendet wird.

So setzen Sie den Kennwortschutz für Exportieren von PDF auf PS So setzen Sie den Kennwortschutz für Exportieren von PDF auf PS Apr 06, 2025 pm 04:45 PM

PDF mit Passwort geschützt in Photoshop exportieren: Öffnen Sie die Bilddatei. Klicken Sie auf "Datei" & gt; "Export" & gt; "Exportieren Sie als PDF". Stellen Sie die Option "Sicherheit" fest und geben Sie dasselbe Passwort zweimal ein. Klicken Sie auf "Exportieren", um eine PDF -Datei zu generieren.

Wie benutze ich XPath, um von einem bestimmten DOM -Knoten in JavaScript aus zu suchen? Wie benutze ich XPath, um von einem bestimmten DOM -Knoten in JavaScript aus zu suchen? Apr 04, 2025 pm 11:15 PM

Detaillierte Erläuterung der XPath -Suchmethode unter DOM -Knoten in JavaScript, wir müssen häufig bestimmte Knoten aus dem DOM -Baum basierend auf XPath -Ausdrücken finden. Wenn Sie ...

Warum müssen Sie Vue.use (Vuerouter) in der Datei idex.js unter dem Router -Ordner anrufen? Warum müssen Sie Vue.use (Vuerouter) in der Datei idex.js unter dem Router -Ordner anrufen? Apr 05, 2025 pm 01:03 PM

Die Notwendigkeit der Registrierung von Vuerouter in der Datei index.js -Datei im Ordner Router Bei der Entwicklung von VUE -Anwendungen stoßen Sie häufig Probleme mit der Routing -Konfiguration. Besonders...

Konzept der C -Sprachfunktion Konzept der C -Sprachfunktion Apr 03, 2025 pm 10:09 PM

C -Sprachfunktionen sind wiederverwendbare Codeblöcke. Sie erhalten Input, führen Vorgänge und Rückgabergebnisse aus, die modular die Wiederverwendbarkeit verbessert und die Komplexität verringert. Der interne Mechanismus der Funktion umfasst Parameterübergabe-, Funktionsausführung und Rückgabeteile. Der gesamte Prozess beinhaltet eine Optimierung wie die Funktion inline. Eine gute Funktion wird nach dem Prinzip der einzigen Verantwortung, der geringen Anzahl von Parametern, den Benennungsspezifikationen und der Fehlerbehandlung geschrieben. Zeiger in Kombination mit Funktionen können leistungsstärkere Funktionen erzielen, z. B. die Änderung der externen Variablenwerte. Funktionszeiger übergeben Funktionen als Parameter oder speichern Adressen und werden verwendet, um dynamische Aufrufe zu Funktionen zu implementieren. Das Verständnis von Funktionsmerkmalen und Techniken ist der Schlüssel zum Schreiben effizienter, wartbarer und leicht verständlicher C -Programme.

Stack Framework und Funktionsaufrufe: So erstellen Sie einen CPU -Overhead Stack Framework und Funktionsaufrufe: So erstellen Sie einen CPU -Overhead Apr 03, 2025 pm 08:09 PM

Ich bin besessen von allen Aspekten des Informatik- und Software -Engineering, und ich mag die zugrunde liegende Programmierung besonders. Es ist wirklich faszinierend, den Interaktionsmechanismus zwischen Software und Hardware zu untersuchen und ihr Grenzverhalten zu analysieren. Selbst bei erweiterten Anwendungsprogramme kann dieses Wissen helfen, Probleme wie die Verwendung des Stack -Speichers zu debuggen und zu lösen. Das Verständnis, wie das Stack -Speicher funktioniert, insbesondere bei der Interaktion mit Hardware, ist entscheidend, um Probleme zu vermeiden und zu debuggen. In diesem Artikel wird untersucht, wie häufig Funktionen in einem Programm zu Overhead führen und die Leistung verringern können. Wenn Sie diesen Artikel lesen, müssen Sie eine bestimmte Wissensbasis aus Stapel-, Heap -Speicher- und CPU -Registern haben. Was ist ein Stack -Framework? Angenommen, Sie führen ein Programm auf Ihrem Computer aus. Das Betriebssystem ruft den Scheduler auf, verteilt Ihrem Programm Speicher und bereitet die CPU zur Ausführung von Anweisungen vor. Das

See all articles