Es gibt drei Dinge, die passieren müssen, bevor Sie „verwenden“ eine Instanz einer Klasse kann, von denen jede Zuweisung von Heap-Speicher beinhaltet:
Die Klassen-Bytecode müssen geladen und verknüpft werden jede lösen statische Abhängigkeiten von anderen Klassen. Die Klasse muss initialisiert werden. Eine Instanz der Klasse muss erstellt werden. Das Laden und Verknüpfen von Klassen erfolgt normalerweise beim Starten der JVM, obwohl dies von der JVM "träge" ausgeführt werden kann, und zwar dynamisch; z.B. Verwenden von Class.forName (...). Dies ist, wenn Speicher für die Klassen "Code" zugewiesen ist.
Die Klasseninitialisierung wird normalerweise unmittelbar vor dem ersten Mal ausgeführt, an dem die Klasse tatsächlich verwendet wird. (Die genauen Einzelheiten sind in der JLS dargelegt). Dies ist der Fall, wenn Speicher für eine Klassenstatik zugewiesen wird.
Die Klassenerstellung erfolgt, wenn das neue Konstrukt verwendet wird. Dies löst auch die Klasseninitialisierung für eine Klasse aus, die noch nicht initialisiert wurde. Dies ist der Fall, wenn Speicher für eine Instanz zugewiesen wird
was ist eine 'Sitzung'? –
ClassLoaders behandeln weder die Instanziierung von Objekten noch die Initialisierung von Klassen. Alles, was sie tun, ist * Laden * Klassen und bieten Zugriff auf Ressourcen. Noch ist "Singleton" ein Klassenmerkmal, das inhärent von Java erkannt wird; es ist vielmehr eine Charakterisierung der Implementierungen einiger Klassen. –
Was möchten Sie wirklich wissen? Gibt es mehr als eine Instanz einer Nicht-Singleton-Klasse? Die Antwort sollte ziemlich offensichtlich sein, oder? –