Czy Garbage Collector usuwa zmienne metody, gdy metoda się wykona?

0

niby czytałem o odśmieczaczu, ale nie znam odpowiedzi na to pytanie.

void myMethod(){
  MyClass mc = new MyClass();
 // ... code
}

czy po wykoaniu się myMethod() w pamięci zmienna mc zostanie usunięta przy kolejnym odpaleniu garbage collector czy może muszę zrobić tak:

void myMethod(){
  MyClass mc = new MyClass();
 // ... code
  mc = null;
}

?

1

Nie musisz. GC analizuje czy są jakieś dojścia do obiektu, a po zakończeniu metody nie będzie już żadnej zmiennej referencyjnej mającej dostęp do tego obiektu, więc zostanie oznaczony do usunięcia.

1

niby czytałem o odśmieczaczu

Guzik prawda. 3 minuty czytania o tym jak działa proste Mark-And-Sweep odpowiedziałyby ci na twoje pytanie.

1

@Shalom
Ale nie wystarczy przeczytać, trzeba przeczytać ze zrozumieniem. Ja mu wierze że czytał :)

0

Jaki GC - przypominam że reference-counting to też poprawny GC (a czasem nawet bardziej niż jakikolwiek mark-*).

pytania

  1. jaki GC
  2. jaki ekosystem (w javie JIT to sprzątnie i obiektów nie będzie)
0

Po wyjściu z funkcji zmienna referencyjna zostanie zwolniona natychmiast.
Obiekt przez nią wskazywany może zostać zwolniony przy najbliższym wykonaniu GC, ale nie musi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1