Mein Endziel ist es, Klassen neu laden zu können, nachdem sie bereits in die JVM geladen wurden.Entladen eines Klassenladers
Nachdem ich die folgende Antwort Unloading classes in java? gelesen habe, habe ich versucht, meinen eigenen Class-Loader zu implementieren, der für jede geladene Klasse selbst eine andere Instanz von Class-Loader (derselben Art von eigenen) erstellt.
Also, das Ergebnis ist eine Klasse pro Klasse-Loader.
Der Zweck ist in der Lage zu GC die Klasse, dh alle seine Instanzen, dann zu entladen seinen Klassenlader, und in der Lage, die gleiche Klasse aus seinen Bytes neu zu laden.
Das Problem ist - Ich kann sehen, meine Klasse Instanz wird Garbage Collected mit Finalize() -Methode, aber ich kann nicht meine Class-Loader entladen oder Müll gesammelt werden.
Gibt es ein Codebeispiel, einen einfachen Test, der zeigt, wie es gemacht werden kann?
sein klarer, ich bin an Code-Beispiele, wo die Instanziierung der neuen Objekte über die ‚neue()‘ ist Operand:
Dank, würde jede mögliche Hilfe
bearbeiten geschätzt werden , und der Class-Loader lädt die Klasse nicht explizit im main, sondern nach dem nächsten 'new()'.
Wenn Sie eine Klasse über einen benutzerdefinierten 'ClassLoader' laden, erhalten Sie ein' Class'-Objekt. Es ist unmöglich, den "neuen" Operator damit zu verwenden. Die Verwendung von 'new' bedeutet, dass der Code mit der von' new' verwendeten Klasse verknüpft wurde. Daher kann die Klasse keine Garbage Collection erhalten, wenn der Code mit dem Ausdruck 'new' noch aktiv ist. Sie müssen Reflection an diesem Punkt verwenden, z. Rufen Sie 'newInstance()' in der 'Class' auf. Natürlich kann der dynamisch geladene Code selbst "neu" verwenden, um Klassen in seinem eigenen Umfang zu instanziieren. – Holger