


Zusammenfassung der Beziehung zwischen Basistyp- und gekapselten Typdaten sowie Heap und Stack in Java
Der Heap von Java ist ein Laufzeitdatenbereich, aus dem Klassenobjekte Speicherplatz zuweisen. Diese Objekte werden durch Anweisungen wie new, newarray, anewarray und multianewarray erstellt und erfordern keine explizite Freigabe des Heaps Der Vorteil des Heaps besteht darin, dass er die Speichergröße dynamisch zuweisen kann und die Lebensdauer dem Compiler nicht im Voraus mitgeteilt werden muss, da er zur Laufzeit dynamisch Speicher zuweist und der Garbage Collector von Java diese nicht mehr verwendeten automatisch sammelt Der Nachteil besteht jedoch darin, dass die Zugriffsgeschwindigkeit aufgrund der dynamischen Zuweisung von Speicher zur Laufzeit langsamer ist.
Der Vorteil des Stapels besteht darin, dass die Zugriffsgeschwindigkeit schneller ist als die des Heaps, gleich nach dem Register , und die Stapeldaten können gemeinsam genutzt werden. Der Nachteil besteht jedoch darin, dass die Größe und Lebensdauer der im Stapel gespeicherten Daten bestimmt werden muss und es an Flexibilität mangelt. Der Stapel speichert hauptsächlich einige grundlegende Variablentypen (int, short). , long, byte, float, double, boolean, char) und Objekthandle
Eine sehr wichtige Besonderheit des Stapels ist, dass die im Stapel gespeicherten Daten gleichzeitig gemeinsam genutzt werden können :
int a = 3; int b = 3;
Der Compiler verarbeitet zunächst int a = 3; er erstellt dann einen Verweis auf die Variable a im Stapel und prüft dann, ob sich im Stapel ein Wert von 3 befindet Wenn nicht, wird 3 darin gespeichert und dann wird int b = 3 verarbeitet, da auf dem Stapel bereits der Wert 3 vorhanden ist 3. Auf diese Weise zeigen a und b gleichzeitig auf 3. Wenn Sie erneut a = 4 festlegen, sucht der Compiler erneut, ob sich ein 4-Wert im Stapel befindet in und auf 4 verweisen; wenn es bereits vorhanden ist, wird die Wertänderung keinen Einfluss auf den Wert von b haben unterscheidet sich von der gemeinsamen Nutzung der Referenzen zweier Objekte, die gleichzeitig auf ein Objekt verweisen, da sich in diesem Fall die Änderung von a nicht auf den Wert von b auswirkt, sondern vom Compiler durchgeführt wird Hilft, Platz zu sparen. Wenn eine Objektreferenzvariable den internen Status dieses Objekts ändert, wirkt sich dies auf eine andere Objektreferenzvariable aus. Es gibt zwei Arten von Zeichenfolgen:
Die erste Methode besteht darin, mit new() ein neues Objekt zu erstellen, das bei jedem Aufruf im Heap gespeichert wird besteht darin, zunächst eine Objektreferenzvariable str der String-Klasse im Stapel zu erstellen und dann zu prüfen, ob „abc“ im Stapel gespeichert ist. Wenn nicht, wird „abc“ auf dem Stapel gespeichert und str zeigt auf „abc“. ". Wenn bereits „abc“ vorhanden ist, zeigt str direkt auf „abc“.
Verwenden Sie beim Vergleich, ob die Werte in der Klasse gleich sind, die Methode equal(). ;Beim Testen, ob die Referenzen vorhanden sind Wenn zwei Wrapper-Klassen auf dasselbe Objekt verweisen, verwenden Sie ==. Das folgende Beispiel veranschaulicht die obige Theorie.
String str = new String("abc"); String str = "abc";
System.out.println(str1==str2); //true
Es ist ersichtlich, dass str1 und str2 auf dasselbe Objekt zeigen.
String str1 = "abc"; String str2 = "abc";
Wenn Sie also die erste Methode verwenden, um mehrere „abc“-Strings zu erstellen, befindet sich tatsächlich nur ein Objekt im Speicher. Diese Schreibweise ist vorteilhaft für die Einsparung von Speicherplatz und kann gleichzeitig verbessert werden die Leistung des Programms bis zu einem gewissen Grad, da die JVM anhand der tatsächlichen Situation der Daten im Stapel automatisch bestimmt, ob ein neues Objekt erstellt werden muss. Für den Code von String str = new String("abc"); werden immer neue Objekte im Heap erstellt, unabhängig davon, ob ihre String-Werte gleich sind oder ob neue Objekte erstellt werden müssen, wodurch die Belastung erhöht wird das Programm.
Andererseits beachten Sie bitte: Wenn wir eine Klasse mit einem Format wie String str = "abc"; definieren, gehen wir immer davon aus, dass das Objekt str der String-Klasse erstellt wird. Sorge vor Fallen! Das Objekt wurde möglicherweise nicht erstellt! Möglicherweise verweist es lediglich auf ein zuvor erstelltes Objekt. Nur durch die Methode new() können wir sicherstellen, dass jedes Mal ein neues Objekt erstellt wird.
String str1 =new String ("abc"); String str2 =new String ("abc"); System.out.println(str1==str2); // false
Aufgrund der Unveränderlichkeit der String-Klasse sollten Sie die Verwendung der StringBuffer-Klasse in Betracht ziehen, wenn die String-Variable ihren Wert häufig ändern muss, um die Programmeffizienz zu verbessern. Der Heap von Java ist ein Laufzeitdatenbereich, aus dem Klassenobjekte durch Anweisungen wie new, newaray und multianewarray erstellt werden. Für die explizite Freigabe ist der Heap verantwortlich Der Vorteil des Heaps besteht darin, dass er die Speichergröße dynamisch zuweisen kann und die Lebensdauer dem Compiler nicht im Voraus mitgeteilt werden muss, da er zur Laufzeit dynamisch Speicher zuweist und der Garbage Collector von Java automatisch die nicht vorhandenen Daten sammelt länger verwendet. Der Nachteil ist, dass aufgrund der dynamischen Speicherzuweisung zur Laufzeit die Zugriffsgeschwindigkeit langsam ist
/************************************************** ************************************************** ********************************************/
1. Datentypen in Java: grundlegende Datentypen und Referenzen. Datentyp;
b.jvm只有一个堆区被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
a.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
b.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
c.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
a.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
b.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。字符串常量在方法区分配 ,数组既在栈空间分配数组名称, 又在堆空间分配数组实际的大小。
上面明白之后,接下来我们来分析 String str=new String("abc");
String str 是定义了一个String类型的变量,此时只定义了而没有创建对象,而new Sring(“abc”)到底做了什么?我们可以查看String的源码,发现如下:
public final class String
implements java.io.Serializable, Comparable
{
/** The value is used for character storage. */
private final char value[];
……
发现她有一个Value的属性,类型是char[],而此数组又做了什么事情?如果读源码会发现他保存了String对象的值,此时也说明String就是char[]来组织的。
当执行String a="abc";时,JAVA虚拟机会在栈中创建三个char型的值'a'、'b'和'c',然后在堆中创建一个String对象,它的值(value)是刚才在栈中创建的三个char型值组成的数组{'a','b','c'}对象,而这个新创建的String对象会被添加到字符串池中。
此时就存在了两个对象:一个在堆中;一个在字符串池中。
/**************************************************************************************************************************/
String str1 = "abc"; String str2 = new String("abc");
Das obige ist der detaillierte Inhalt vonZusammenfassung der Beziehung zwischen Basistyp- und gekapselten Typdaten sowie Heap und Stack in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.
