© Excellent backgrounds/Shutterstock.com
Java Magazin
Teil 2: JVM Internals

Ein Blick auf die Interna

Wir wollen Ihnen in dieser Artikelreihe einen Überblick über die Neuerungen in Java 9 verschaffen und einige Features von Java 9 kurz erläutern. Dabei haben wir diejenigen Themen ausgewählt, von denen wir denken, dass sie für Java-Entwickler am interessantesten sind. Und natürlich werfen wir einen Blick auf die größte Neuerung: das Modulsystem.

Angelika Langer, Klaus Kreft


Java 9 – ÜberblickTeil 1: Ergänzungen der Sprache und der existierenden APIsTeil 2: JVM Internals Teil 3: Neue und alte JDK-Tools Teil 4: Project Jigsaw aka Java Module System Teil 5: JDK-interne Packages wie sun.misc.* und ihr Ersatz Teil 6: Concurrency Updates

In vielen Java-Applikationen werden große Mengen an Strings angelegt und verarbeitet. Man hat beispielsweise festgestellt, dass eine typische Java-Applikation ungefähr 25 Prozent des Speichers mit Strings belegt. Deshalb gibt es auch Optimierungen in diesem Zusammenhang. Ein Ziel war es, deren Speicherbedarf zu reduzieren. Die Konkatenierung von Strings wurde überarbeitet und das Handling von Interned-Strings wurde verbessert.

Stringdeduplikation spart Speicherplatz

Mit der Reduktion des Speicherbedarfs von Strings wurde bereits in Java 8 begonnen. Mit JDK 8u20 wurde die so genannte Stringdeduplikation in den G1 (Garbage First) Garbage Collector eingebaut [1]. Dieser Garbage-Collection-Algorithmus macht keine Stringdeduplikation im eigentlichen Sinne. Er sucht nach char-Arrays gleichen Inhalts. Das kann ein Garbage Collector bequem machen, weil er ohnehin im Rahmen der Gar­bage Collection die erreichbaren Objekte besuchen muss. Er baut dabei einen Cache mit char-Arrays auf, die zu String­objekten gehören. Wenn er Duplikate unter den char-Arrays findet und sie ein gewisses Alter erreicht haben (siehe -XX:StringDeduplicationAgeThreshold), sorgt er dafür, dass die zugehörigen Stringobjekte gemeinsam das eine char-Array im Cache benutzen. Die Deduplikation reduziert die Zahl der char-Arrays und damit den Speicherbedarf der Strings insgesamt. Eine solche Optimierung kann man für Strings machen, weil String ein unveränderlicher Typ ist und Strings ihre char-Arrays nicht modifizieren. Für StringBuilder, StringBuffer oder andere veränderliche Zeichenketten geht es natürlich nicht. Die Stringdeduplikation funktioniert nur mit dem G1 Garbage Collector. Man muss dafür folgende JVM-Optionen setzen:

-XX:+UseG1GC -XX:+UseStringDeduplication

Der G1 Garbage Collector ist in Java 9 bereits per Default gesetzt, sodass man in Java 9 nur noch die Deduplikation explizit einschalten muss.

Strings weiter kompaktieren

Das Ziel, den Speicherverbrauch von Strings zu reduzieren, wird mit der Stringkompaktierung verfolgt [2]. Man hat festgestellt, dass die allermeisten Strings nur ISO-8859-1-/Latin-1-Zeichen enthalten. Das sind Kodierungen, für die man nur ein Byte pro Zeichen braucht. In Java enthalten Strings aber char-Array...

Java Magazin
Teil 2: JVM Internals

Ein Blick auf die Interna

Wir wollen Ihnen in dieser Artikelreihe einen Überblick über die Neuerungen in Java 9 verschaffen und einige Features von Java 9 kurz erläutern. Dabei haben wir diejenigen Themen ausgewählt, von denen wir denken, dass sie für Java-Entwickler am interessantesten sind. Und natürlich werfen wir einen Blick auf die größte Neuerung: das Modulsystem.

Angelika Langer, Klaus Kreft


Java 9 – ÜberblickTeil 1: Ergänzungen der Sprache und der existierenden APIsTeil 2: JVM Internals Teil 3: Neue und alte JDK-Tools Teil 4: Project Jigsaw aka Java Module System Teil 5: JDK-interne Packages wie sun.misc.* und ihr Ersatz Teil 6: Concurrency Updates

In vielen Java-Applikationen werden große Mengen an Strings angelegt und verarbeitet. Man hat beispielsweise festgestellt, dass eine typische Java-Applikation ungefähr 25 Prozent des Speichers mit Strings belegt. Deshalb gibt es auch Optimierungen in diesem Zusammenhang. Ein Ziel war es, deren Speicherbedarf zu reduzieren. Die Konkatenierung von Strings wurde überarbeitet und das Handling von Interned-Strings wurde verbessert.

Stringdeduplikation spart Speicherplatz

Mit der Reduktion des Speicherbedarfs von Strings wurde bereits in Java 8 begonnen. Mit JDK 8u20 wurde die so genannte Stringdeduplikation in den G1 (Garbage First) Garbage Collector eingebaut [1]. Dieser Garbage-Collection-Algorithmus macht keine Stringdeduplikation im eigentlichen Sinne. Er sucht nach char-Arrays gleichen Inhalts. Das kann ein Garbage Collector bequem machen, weil er ohnehin im Rahmen der Gar­bage Collection die erreichbaren Objekte besuchen muss. Er baut dabei einen Cache mit char-Arrays auf, die zu String­objekten gehören. Wenn er Duplikate unter den char-Arrays findet und sie ein gewisses Alter erreicht haben (siehe -XX:StringDeduplicationAgeThreshold), sorgt er dafür, dass die zugehörigen Stringobjekte gemeinsam das eine char-Array im Cache benutzen. Die Deduplikation reduziert die Zahl der char-Arrays und damit den Speicherbedarf der Strings insgesamt. Eine solche Optimierung kann man für Strings machen, weil String ein unveränderlicher Typ ist und Strings ihre char-Arrays nicht modifizieren. Für StringBuilder, StringBuffer oder andere veränderliche Zeichenketten geht es natürlich nicht. Die Stringdeduplikation funktioniert nur mit dem G1 Garbage Collector. Man muss dafür folgende JVM-Optionen setzen:

-XX:+UseG1GC -XX:+UseStringDeduplication

Der G1 Garbage Collector ist in Java 9 bereits per Default gesetzt, sodass man in Java 9 nur noch die Deduplikation explizit einschalten muss.

Strings weiter kompaktieren

Das Ziel, den Speicherverbrauch von Strings zu reduzieren, wird mit der Stringkompaktierung verfolgt [2]. Man hat festgestellt, dass die allermeisten Strings nur ISO-8859-1-/Latin-1-Zeichen enthalten. Das sind Kodierungen, für die man nur ein Byte pro Zeichen braucht. In Java enthalten Strings aber char-Array...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang