moim ostatecznym celem jest możliwość ponownego załadowania klas po ich załadowaniu do maszyny JVM.Rozładowanie programu ładującego klasy
Po przeczytaniu następującej odpowiedzi Unloading classes in java?, próbuję zaimplementować mój własny program ładujący klasy, który sam tworzy inne wystąpienie programu ładującego klasy (tego samego typu) dla każdej ładowanej klasy.
, więc wynikiem jest jedna klasa na jednego Class-Loader.
Celem jest umożliwienie GC klasy, czyli wszystkich jej wystąpień, a następnie zwolnienie jej programu ładującego klasy i umożliwienie ponownego załadowania tej samej klasy z jej bajtów.
Problem polega na tym, - widzę, że moja instancja klasy jest śmieciem zebranym za pomocą metody finalize(), ale nie mogę pobrać programu ładującego klasy ani zebrać śmieci.
Czy istnieje przykład kodu, prosty test, który pokazuje, jak można to zrobić?
dzięki, każda pomoc będzie mile widziane
Edycja:
być jaśniejsze, jestem zainteresowany przykłady kodu gdzie instancji nowych obiektów jest przez "nowego() argumentu , a moduł ładujący klasy nie przeładowuje bezpośrednio klasy w trybie głównym, ale po wywołaniu następnej funkcji "new()".
Po załadowaniu klasy przez niestandardową 'ClassLoader', otrzymasz obiekt' Class'. Niemożliwe jest użycie tego operatora 'nowego'. Użycie 'new' oznacza, że kod został połączony z klasą używaną przez' new', a zatem klasa nie może uzyskać śmieci zebranych, gdy twój kod zawierający wyrażenie 'new' jest nadal aktywny. W tym miejscu musisz użyć Reflection, np. wywołaj 'newInstance()' na 'Class'. Oczywiście dynamicznie ładowany kod może sam używać 'new' do tworzenia instancji klas w swoim własnym zakresie. – Holger