2012-10-12 13 views
7

Jestem po prostu ciekawy.
Załóżmy, że definiuję odwołanie wewnątrz pętli while/for.JAVA: odwołanie zdefiniowane w pętli

czy JVM definiuje to odwołanie w każdej iteracji, czy jest zoptymalizowane tak, aby zdefiniować je tylko raz?

+2

Co masz na myśli, "zdefiniuj"? To naprawdę zależy od tego, co masz na myśli. Zmienna będzie ponownie inicjowana za każdym razem, ale pamięć zostanie prawdopodobnie ponownie wykorzystana. –

+1

Co masz na myśli przez "zdefiniowanie odniesienia"? Ściśle mówiąc, odniesienie jest wartością zmiennej, co jest dalekie od alokacji obiektu. Te dwie interpretacje mają bardzo różne odpowiedzi. –

Odpowiedz

7

Definiuje to za każdym razem i jest ograniczone do tej samej iteracji pętli.

Po wykonaniu pętli iteracja kwalifikuje się do GC.

Jak skomentował Louis Wasserman, zmienna zostanie ponownie zaimplementowana za każdym razem, ale pamięć zostanie prawdopodobnie ponownie wykorzystana.

+0

dziękuję. dobrze wiedzieć – socksocket

+0

Nie ma za co. – kosa

+0

Nie kwalifikuje się do GC. Szczelina stosu będzie istniała do czasu ponownego wykorzystania przez kolejną zmienną zadeklarowaną po pętli, jeśli jest, inaczej, dopóki metoda nie zostanie zakończona. Nie ma instrukcji JVM odpowiadającej nawiasowi zamykającemu pętli, więc nie ma możliwości, aby JVM dowiedziała się, że gniazdo nie jest już używane. – EJP

2

Jest zdefiniowany za każdym razem. Nie ma na to optymalizacji (według mojej wiedzy).

1

-określa odniesienia Everytime z iteracji pętli, lecz zakres odniesienia jest dołączony tylko do tej iteracji.

- Uważają, że masz ogłosił odwołanie poza pętlą, ale obiekt przypisać do niego wewnątrz pętla, a następnie odniesienie pozostaje taka sama, ale odwoływać się nowy obiekt tego typu w każdym iteracja.

4

Odwołanie jest definiowane w każdej iteracji. Po zoptymalizowaniu kodu do kodu natywnego można go przenieść poza pętlę, więc nie musi mieć wpływu na wydajność. Jeśli ustawisz to odniesienie do obiektu new za każdym razem, może on utworzyć nowy obiekt w każdej iteracji, chyba że tworzenie tego obiektu zostanie również zoptymalizowane.

Powiązane problemy