Heim > Java > javaLernprogramm > Hauptteil

Welche Funktion hat die Methode String.intern() in Java?

WBOY
Freigeben: 2023-05-23 17:10:06
nach vorne
1436 Leute haben es durchsucht

String.intern-Prinzip

String.intern():
Diese Methode ist eine native Methode
Die zugrunde liegende Methode wird durch Aufrufen der StringTable::intern-Methode von C++ implementiert

Wenn die intern()-Methode über die Anweisung str aufgerufen wird. intern()
JVM Es wird im Konstantenpool der aktuellen Klasse gesucht, ob es einen String mit dem gleichen Wert wie str gibt. Wenn vorhanden, wird direkt die Referenz des entsprechenden Strnig im Konstantenpool zurückgegeben. Wenn dies nicht der Fall ist vorhanden ist, wird ein äquivalenter String im Konstantenpool erstellt. Dann wird die Referenz dieses Strings im Konstantenpool zurückgegeben. -------------------------- --------------- -----------------------
Daher, solange es sich um äquivalente String-Objekte handelt
, die Verwendung der intern()-Methode gibt die gleiche String-Referenz im Konstantenpool zurück
Diese äquivalenten String-Objekte können also mit == nach intern()


String.intern() in JDK6

Der Konstantenpool in Jdk6 befindet sich in PermGen (permanente Generation)

PermGen ist ein wichtiger Bereich mit fester Größe, der zum Speichern geladener Klasseninformationen und des String-Pools verwendet wird

---------------------------------- ------------ -------------------------------------- ----
Beim Ausführen der intern()-Methode

Wenn im Konstantenpool keine entsprechende Zeichenfolge vorhanden ist, erstellt die JVM eine entsprechende Zeichenfolge im Konstantenpool
und gibt dann einen Verweis auf die Zeichenfolge zurück
Darüber hinaus gibt die JVM speichert automatisch eine vorherige Kopie in der Konstantenpool-Sammlung verwendeter Zeichenfolgen
Das Hauptproblem bei der Verwendung der intern()-Methode in Jdk6 besteht darin, dass der Konstantenpool in PermGen (permanente Generation) gespeichert wird

Hinweise:
Zunächst einmal PermGen ist ein Bereich mit fester Größe, im Allgemeinen auf verschiedenen Plattformen. Die Standardgröße von PermGen ist ebenfalls unterschiedlich,
Sie liegt ungefähr zwischen 32 MB und 96 MB.

Daher können Sie die intern()-Methode nicht für unkontrollierte Laufzeitzeichenfolgen (z. B. Benutzereingabeinformationen usw.) verwenden.

Andernfalls kann es zu einem PermGen-Speicherüberlauf kommen.
Zweitens wird das String-Objekt im Java-Heap gespeichert Der Java-Heap-Bereich ist derselbe wie PermGen und ist physisch isoliert.
Wenn daher interne Operationen an mehreren ungleichen Zeichenfolgenobjekten ausgeführt werden,
führt dies zu vielen doppelten Zeichenfolgen im Speicher, was zu Leistungsverlusten führt


String.intern() in JDK7

Jdk7 hat den Konstantenpool aus dem PermGen-Bereich in den Java-Heap-Bereich verschoben

Beim Ausführen der internen Operation

Wenn die Zeichenfolge bereits im Konstantenpool vorhanden ist, wird die Zeichenfolgenreferenz direkt zurückgegeben
Andernfalls Die Referenz des String-Objekts wird in den Konstantenpool kopiert und zurückgegeben

Die Größe des Heap-Bereichs ist im Allgemeinen nicht begrenzt, sodass durch das Verschieben des Konstantenpools vom PremGen-Bereich in den Heap-Bereich die Verwendung des Konstantenpools nicht mehr eingeschränkt ist eine feste Größe
Darüber hinaus können Objekte im Konstantenpool, die sich im Heap-Bereich befinden, durch Müll gesammelt werden
Wenn die Zeichenfolge im Konstantenpool keinen Verweis mehr darauf hat, recycelt die JVM die Zeichenfolge
Sie können Folgendes verwenden: XX:StringTableSize-Parameter für virtuelle Maschinen zum Festlegen der Kartengröße des String-Pools Auf die erforderliche Zahl * 2 abbilden (Hash-Konflikte reduzieren)
Auf diese Weise können Sie nur String.intern() erstellen. Es erfordert konstante Zeit und
ziemlich wenig Speicher, um einen String im String-Pool zu speichern
Funktion von String.intern() Methode:
Seine Funktion besteht darin, die Zeichenfolge manuell in den Konstantenpool einzufügen

Das obige ist der detaillierte Inhalt vonWelche Funktion hat die Methode String.intern() in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
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