6

Próbuję zrozumieć więcej o funkcji dispose() klasy AWT/Swinga Window i co ona robi. Wyobraźmy sobie następującą serię zdarzeń:Czy Java może ponownie wykorzystać niezebrane systemowe zasoby GUI?

  1. Instancja A pochodnej okna X jest gromadzona podczas zbierania śmieci po wyjściu poza zakres. Dispose to , a nie wywoływane przed zbiorem śmieci.
  2. Nowa instancja X, B jest tworzona i wyświetlana.

Czy B wykorzystuje niewykorzystane zasoby pozostawione po tym, jak A zostało oznaczone GC?

Ponadto, dla pochodnej okna Z, jeśli istnieje wiele przypadków Z, czy JRE jest w stanie ponownie wykorzystać zasoby okna między nimi?

Odpowiedz

1

Jest to bardziej z ogólnego zrozumienia jak działa, ale pamięć:

Jeżeli środki nie zostały sprzedane, nie można z nich korzystać, ponieważ nadal są podejmowane w górę. Kiedy zasoby nie są utylizowane/śmieci są zbierane/zwalniane, nie są one użyteczne, ponieważ w tej pamięci jest coś innego. Jednak po wyjściu poza zakres stosowania powinien on zostać usunięty. Jeśli nie jest, to jest to, ale w JVM, która spowodowałaby memory leak.

Dla drugiej części, jeśli chodzi o bloki pamięci między przedmiotami, wszystko zależy od tego, czy jest wystarczająco dużo miejsca. Ponownie, nie jestem w 100% zorientowany na to, jak JVM zarządza pamięcią, ale jeśli potrzebujesz dwóch bloków pamięci i istnieje tylko jeden blok pomiędzy Z1 i Z2, to nie, potrzebowałby on sąsiadującej przestrzeni w pamięci.

Powiązane problemy