Gibt es eine Garantie, dass (der Standard, System) Java Klassenlader nicht versucht, Klassen zu laden, die nicht in dem Code ausgeführt werden, der ausgeführt wird? Ein paar Beispiele dafür, was ich meine:Wird sichergestellt, dass der Java-Klassenlader keine nicht verwendeten Klassen lädt?
- Ich bin ein mit
framework.jar
, die ich kenne Verweise auf anderelibrary.jar
enthalten ‚s Klassen drin, aber ich verwende nur solche Teil des Rahmens, der doesn‘ t enthalten diese Referenzen. Ist es sicher,library.jar
zu verlassen? - Statische Blöcke werden ausgeführt, wenn eine Klasse zuerst geladen wird. Wenn kein laufender Code Verweise auf eine bestimmte Klasse enthält, ist es sicher, dass der statische Block nicht ausgeführt wird?
Schnell Prüfung scheint es, wie oben angenommen zu arbeiten, und es würde nicht viel Sinn machen ohnehin nicht genutzte Klassen zu laden, aber gibt es keine Garantie dazu?
Addition: Es scheint, dass meine "statische Blöcke ausgeführt werden, wenn eine Klasse zuerst geladen wird" Anweisung oben ist etwas falsch. Es ist definitiv möglich, laden Klassen (eine Sache) ohne läuft sie (eine andere Sache). Also bin ich an beiden Fällen interessiert; Garantien über Klassen nicht erhalten geladen, und nicht bekommen Lauf.
AFAIK, hier zählt nicht nur die "Referenz", sondern auch die Verwendung. Solange eine Klasse nicht verwendet wird (d. H. In einem ausführenden Bytecode-Befehl referenziert wird), wird sie nicht geladen. Natürlich ist dies nicht durch die Spezifikation garantiert, aber jede JVM, die sich selbst respektiert, verhält sich so. – sasuke