Mit maßgeschneiderten Klassenladern lästige Fehler in Java vermeiden

Eine der leistungsfähigsten Funktionen von Java sind Klassenlader (class loaders). Die Klasse ClassLoader ist für das Finden und Laden von Klassendateien in Laufzeit verantwortlich. Java ermöglicht die Verwendung unterschiedlicher Klassenlader. Es können sogar eigene Klassenlader erstellt werden.

Ein Java-Programm besteht aus einer Vielzahl von Klassendateien. Jede davon repräsentiert eine einzelne Java-Klasse. Diese Klassendateien werden nicht alle gleichzeitig in den Speicher geladen, wie bei einem statisch erstellten C-Programm, sondern erst bei Bedarf.

Hier kommt der Klassenlader ins Spiel: Er entnimmt plattformunabhängigen kompilierten Bytecode aus einer Quelle (normalerweise entweder eine .class– oder eine .jar-Datei) und lädt diesen in den Speicherbereich der JVM. Anschließend kann der Code interpretiert und ausgeführt werden. Standardmäßig wird jede Klasse in einer Anwendung von einer Instanz des java.lang.ClassLoader geladen. Die Funktionalität lässt sich per Vererbung leicht erweitern.

Warum maßgefertigte Klassenlader verwenden?

Der standardmäßige Klassenlader java.lang.ClassLoader kann nur Klassen aus dem lokalen Dateisystem laden. Java ist allerdings flexibel genug ausgelegt, um Klassen auch von anderen Orten als von der lokalen Festplatte oder dem Netzwerk zu laden. Und Java ermöglicht das Ausführen bestimmter Schritte, ehe das eigentliche Laden erfolgt. So kann eine Anwendung routinemäßig immer erst prüfen, ob eine neuere Version einer Plugin-Klasse auf einer Website oder per FTP verfügbar ist. Gleichzeitig verifiziert sie automatisch eine digitale Signatur, um sicherzustellen, dass nur vertrauenswürdiger Code ausgeführt wird. Viele gängige Anwendungsserver verwenden ihre eigenen hochentwickelten Klassenlader.

Der sogenannte Bootstrap-Klassenlader wird normalerweise als Standard benutzt. Er ist verantwortlich für das Laden wichtiger Klassen, wie java.lang.Object und weiteren Laufzeitcodes aus der Datei rt.jar, in den Speicher. Die Java Language Specification liefert keinerlei Details über den Bootstrap-Klassenlader, da er über eine native Implementierung verfügt. Somit können unterschiedliche JVMs auch ein unterschiedliches Verhalten des Standardklassenladers aufweisen.

Wenn etwa auf einer Website Applets ausgeführt werden, wird dazu ein maßgeschneiderter Klassenlader verwendet. Der in den Browser integrierte Applet-Viewer enthält einen Klassenlader, der auf eine Website eines entfernten Servers zugreift. Er lädt die rohen Bytecode-Dateien über HTTP und wandelt sie innerhalb der JVM in Klassen um.

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

Facebook Marketplace: EU verhängt Geldbuße von fast 800 Millionen Euro gegen Meta

Die EU-Kommission kritisiert die Verknüpfung von Facebook und dem hauseigenen Online-Kleinanzeigendienst. Sie sieht darin einen…

32 Minuten ago

Umfrage: Angestellte in Deutschland unterschätzen NIS-2-Richtlinie

Fast zwei Drittel halten jedoch eine Umsetzung aller Vorgaben von NIS 2 bis Jahresende für…

10 Stunden ago

Kostenloser Dekryptor für ShrinkLocker

Mit dem Dekryptor von Bitdefender können Opfer von Attacken mit der Shrinklocker-Ransomware Dateien wiederherstellen.

24 Stunden ago

Malwarebytes warnt vor Betrugsmaschen beim Weihnachtseinkauf

In der Vorweihnachtszeit ist vor allem Malvertising auf dem Vormarsch. Cyberkriminelle locken Nutzer über schädliche…

24 Stunden ago

Bedrohungsindex: Deutliche Zunahme von Infostealern im Oktober

Dazu trägt unter der Infostealer Lumma-Stealer bei. Hierzulande dominiert der Infostealer Formbook die Malware-Landschaft.

2 Tagen ago

Chrome 131 schließt zwölf Sicherheitslücken

Eine schwerwiegende Anfälligkeit hebelt die Sicherheitsfunktion Seitenisolierung auf. Betroffen sind Chrome für Windows, macOS und…

2 Tagen ago