Jeśli robisz System.exit(1)
z aplikacji Swing, czy natywne zasoby związane z grafiką są automatycznie zwalniane? Jeśli dodam myFrame.dispose()
z myFrame
będącym jedynym kontener najwyższego poziomu w aplikacji, czy mogę mieć pewność, że nie dostanę irytującego zachowania widocznego w niektórych GUI inny niż Java używający programów, w których część stanu GUI przykleja się do ekranu podczas nagłego wyjścia ?
2 odpowiedzi
Wszystko, co posiada proces, jest zwalniane po zakończeniu procesu, chyba że mówimy o patologicznych systemach operacyjnych, takich jak Netware 3 i 4.
Kontenery najwyższego poziomu nigdy nie były GC, ponieważ pominięta metoda finalize()
W tym kontekście
JFrame.dispose()
nic nie rób, ten kontener jest nadal obecny w UsedMemory, niezmieniony, aż do zakończenia bieżącej instancji JVM,możesz zwrócić UsedMemerory, usuwając jego zawartość, zauważ, że usuń wszystko z
ContentPane
, w przeciwnym razie(RootPane
usunięto) Twój pojemnik pozostaje przezroczysty, tylko z widocznymiToolBar
iBorders
,wszystkie okna są zawsze dostępne i wielokrotnego użytku, możesz to przetestować przez
Window[] allWindows = Window.getWindows();
przez cały cykl życia aplikacjiprzed ponownym użyciem kontenera testowego dla
isDisplayable()
wszystko, co ważne tutaj
Następnie
1) nie twórz wielu kontenerów Top-Level,
2) użyj ponownie istniejącego kontenera
3) tylko Object
, które utraciły wszystkie referencje, może być GC'ed
Podobne pytania
Powiązane pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].