/ / Czy moduł śmieciowy Java uwolniłby nieużywaną klasę? - java, jvm, java-bytecode-asm

Czy Java garbage collector może bezpłatnie korzystać z nieużywanej klasy? - java, jvm, java-bytecode-asm

Mój program używa biblioteki ASM do generowania klasy adhoc w celu wydajnego obliczenia. Każde połączenie generuje nową klasę.

Instancja modułu ładującego, która definiuje klasę adhoc, i wszystkie instancje klasy adhoc będą niedostępne w krótkim czasie. Czy po tym zostanie zwolniony kod klasy adhoc?

Odpowiedzi:

3 dla odpowiedzi № 1

Tak, po tym, jak moduł ładujący kwalifikuje się do odśmiecania, wówczas załadowane przez niego klasy będą również kwalifikować się do odśmiecania (pod warunkiem, że nie ma innych odniesień do klas).


0 dla odpowiedzi nr 2

Zależy, co masz na myśli „po tym”. Nie można wymusić uruchomienia modułu wyrzucania elementów bezużytecznych, samo środowisko zdecyduje, czy ma zostać uruchomione, nawet jeśli zostanie to „jawnie wywołane”.

W rzeczywistości wywołanie gc w celu uruchomienia jest po prostu „żądaniem” jego uruchomienia.

Więc: czy zmienna, do której nie ma już odniesienia, zostanie oczyszczona? Tak. Kiedy to się stanie? Tego nie możemy powiedzieć na pewno. Zasadniczo odpowiedź brzmi: „kiedy gc decyduje się to wyczyścić”.