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
Michael Ras 24 luty 2012, 12:53

2 odpowiedzi

Najlepsza odpowiedź

Wszystko, co posiada proces, jest zwalniane po zakończeniu procesu, chyba że mówimy o patologicznych systemach operacyjnych, takich jak Netware 3 i 4.

4
user207421 24 luty 2012, 13:10
  • 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 widocznymi ToolBar i Borders,

  • wszystkie okna są zawsze dostępne i wielokrotnego użytku, możesz to przetestować przez Window[] allWindows = Window.getWindows(); przez cały cykl życia aplikacji

  • przed 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

2
Community 23 maj 2017, 12:59