4.15.1 | Ablauf |
Das Laden von Klassen in die Virtual Machine erfolgt mit einer »On demand«-Strategie. Der Bytecode einer Klasse wird erst dann geladen, wenn das erste Exemplar von ihr erzeugt oder auf einen statischen Bestandteil zugegriffen wird.
Diese Vorgehensweise hat den Vorteil, dass nur das geladen wird, was zur Laufzeit tatsächlich benötigt wird. Allerdings können sich auch Nachteile hinsichtlich der Performance ergeben, wenn die Erzeugung des ersten Exemplars und somit das Laden einer Klasse in einen geschwindigkeitskritischen Abschnitt der Anwendung fällt oder falls die Verzögerung während des Ladevorgangs für den Benutzer störend wirkt.
Bei Applets macht sich das Nachladen besonders dann störend bemerkbar, wenn kein Archiv verwendet wurde, weil eine HTTP-Verbindung zum Applet-Host aufgebaut werden muss, um den Bytecode der Klasse von dort zu laden.
Glücklicherweise kann man die Methode Class.forName() dazu benutzen, um eine Klasse vorzeitig in die Virtual Machine zu laden. Man braucht daher für jede Klasse, die vorab geladen werden soll, lediglich einen Class.forName()-Aufruf an einer geeigneten Stelle auszuführen. In einem Applet könnte man den Aufruf in der init()-Methode platzieren:public void init() { Class.forName("MyBigClass"); }Hierdurch wird der Bytecode von MyBigClass zunächst mit dem HTTP-Protokoll vom Applet-Host geladen und dann in die Virtual Machine des Browsers aufgenommen. Bei dieser Variante von forName() werden auch alle von MyBigClass benötigten Klassen geladen, die bisher noch nicht geladen sind.
Der Rückgabewert von forName() wurde in diesem Beispiel ignoriert.