© drumdredd777/Shutterstock.com
Im Fokus: Projekt Valhalla

„Codes like a class, works like a primitive“


Projekt Valhalla [1] ist ein sehr umfangreiches Projekt, das Oracle bereits im Jahr 2014 gestartet hat. Aktuell gibt es bereits den zweiten Prototyp, am dritten wird gearbeitet. In diesem Artikel erläutern wir die Beweggründe hinter dem Projekt sowie Lösungsansätze und den aktuellen Stand.

Ziel des Projekts Valhalla ist die Bereitstellung einer JVM-Infrastruktur für die Arbeit mit unveränderlichen Objekten, die sich nur durch den Zustand ihrer Eigenschaften unterscheiden. „Codes like a class, works like a primitive“, wie es Brian Goetz, Java Language Architect bei Oracle, sagt.

In Java gibt es sowohl primitive Typen als auch Referenztypen. Das Speichern von Objekten im Java Heap hat seinen Preis. Die Metadaten des Objekts benötigen den zusätzlichen Speicher, z. B. für die Informationen, die für die Synchronisation von Objekten, Objektidentität, Polymorphismus und Garbage Collection benötigt werden. Allein das Speichern dieser Metadaten kann mehr Speicherplatz verbrauchen als die eigentlichen Eigenschaften des Objekts. Außerdem hat sich Hardware in den letzten Jahren massiv verändert. Wir haben ausschließlich mit Multikernprozessoren zu tun. Dabei haben sich die Kosten von sogenannten Cache Misses erhöht. Im Fall von Cache Miss wird der Wert nicht aus einem der Prozessorcaches, sondern aus dem Hauptspeicher geholt. Um das zu veranschaulichen, werfen wir einen Blick auf die Hardwarearchitekturen. Abbildung 1 zeigt eine sehr einfache Darstellung der Memory-Hierarchie. Wir sehen, dass jeder Prozessor eigene L1-(First Level-) und L2-(Second Level-)Caches besitzt. Es gibt außerdem noch einen optionalen, prozessorübergreifenden L3-Cache.

alukhanov_kazulkin_peters_valhalla_1.tif_fmt1.jpgAbb. 1: Memory-Hierarchie

In den Caches werden die Informationen gespeichert, die der Prozessor wahrscheinlich sehr häufig und in naher Zukunft für seine Berechnungen benötigt. Bei der Suche nach Informationen geht der Prozessor die Caches in der Reihenfolge L1, L2, L3 nacheinander durch. Falls in keinem der Caches die vom Prozessor gesuchte Information zu finden ist (Cache Miss), findet ein Zugriff auf den Hauptspeicher statt. Generell gilt: Je näher der Cache am Prozessor ist, desto kleiner ist er. Wie groß die Caches tatsächlich sind, kann man unter Linux mithilfe von lscpu ermitteln – für Windows empfiehlt sich die Nutzung des Tools CPU-Z. Normalerweise ist der L1-Cache ab 64 KB (32 KB jeweils für Instruction und Data Cache), der L2-Cache ab 256 KB und der optionale L3-Cache ab 2 MB groß. Einen sehr guten Überblick über die...

Neugierig geworden?

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