de colectare a gunoiului

de colectare a gunoiului

de colectare a gunoiului

Linia de colectare a gunoiului comportament (de recuperare a memoriei)


Java programator nu are nevoie să monitorizeze alocarea de memorie, deoarece colectorul de gunoi gestionează în mod automat de memorie. Colectorul de gunoi se execută o mașină virtuală Java (JVM). Colectorul de gunoi - este un proces cu prioritate scăzută, care rulează periodic și eliberează memoria utilizată de obiecte care nu mai sunt necesare.

Rularea gunoier


JVM începe de obicei de colectare a gunoiului la un nivel scăzut de memorie liberă. Dar lucrarea de gunoier nu garantează că va exista întotdeauna suficientă memorie liberă.

În cazul în care memoria nu este suficient, chiar și după recuperare, JVM aruncă o OutOfMemoryError. Rețineți că declanșează în mod necesar colectorul de gunoi de cel puțin 1 dată înainte de a genera JVM excepție.

Puteți solicita începerea colectorului de gunoi, dar nu poate forța seta acțiunea.

Solicitare rula colectorul de gunoi


Pentru o interogare, puteți apela una dintre următoarele metode:

Adecvarea pentru a rula colectorul de gunoi


Obiectul trebuie să fie eliminate atunci când nu este disponibil live stream.

Obiectul poate fi dispus în diferite cazuri:

  • În cazul în care un tip de variabilă de referință care se referă la obiectul este setat la „0“, obiectul trebuie să fie eliminate în cazul în care nu există alte referiri la ea.
  • În cazul în care variabila este un tip de referință, care se referă la un obiect creat pentru un link la un alt obiect, obiectul trebuie să fie eliminate în cazul în care nu există alte referiri la ea.
  • Obiectele create la nivel local într-o metodă de eliminare atunci când metoda se încheie, cu excepția cazului în care sunt exportate din această metodă (adică, returnate sau generate ca o excepție).
  • Obiectele care se referă la unul de altul pot fi eliminate, în cazul în care nici unul dintre ei este disponibil live stream.

Luați în considerare acest exemplu:

În acest exemplu, obiectul Integer (întreg), care se referă inițial pointer o1 poate fi supus reciclării după linia 3, deoarece o1 se referă acum la un obiect String (String). În ciuda faptului că o2 creat pentru referință la zero, ca un șir (string), nu poate fi tratată ca o1 se referă la el.

Definitivarea


Java tehnologie vă permite să utilizați metoda finalize () (finalizat) pentru a produce curățarea necesară înainte de colectorul de gunoi elimină obiectul din memorie. Această metodă se numește pentru obiectul de către colectorul de gunoi atunci când colectorul de gunoi calculează că referirea la un obiect nu mai este. Acest lucru este descris în Obiect de clasă, ceea ce înseamnă că este moștenită de toate clasele. înlocuirile Subclasa finaliza () metoda pentru a scapa de resurse de sistem sau de la un alt tratament:

În cazul în care o excepție este generată de Definitivarea neînregistrate (), excepția este ignorată și finalizarea acestui obiect se termină.

finalizeze (), metoda va fi activat numai o singură dată pe durata de viață a obiectului.

Puteți utiliza metoda finaliza () de orice obiect pentru al proteja de reciclare. Dar, în acest caz, colectorul de gunoi nu se va finaliza activează () pentru acel obiect.

o dată înainte de obiectul este șters de către colectorul de gunoi va fi întotdeauna activat finalize () metoda. Cu toate acestea, este posibil ca metoda de finalizare () nu va fi activat pentru un anumit obiect pentru toate timpurile existenței sale, din moment ce nu poate fi supus eliminării.


În această secțiune, ne-am uitat la procesul de colectare a gunoiului, care se referă la o tehnică de gestionare a memoriei Java. De colectare a gunoiului nu poate fi dat prin forță. Ne-am întâlnit în diverse moduri în tratarea obiectelor care trebuie eliminate, și am aflat că metoda finalize () este activat înainte ca obiectul este îndepărtat prin colectorul de gunoi.

exercițiu


Câte obiecte vor fi eliminate după linia 7?

Răspunsuri posibile:


A. 0
B. 1
2 C.
D. 3
E. Codul nu poate fi compilat

versiunea corectă:
explicaţie:


Dintre cele trei obiecte create în rândurile 1, 2 și 3, numai obiect Integer să fie dispus la capătul liniei 7. Legătura variabilă, o, care a invocat inițial obiectul Integer se referă la un obiect String în rândul 5. Astfel, Integer Object reciclabile după linia 5, din moment ce nu există variabile care se referă la ea. Variabilele b și c se referă la obiecte lungi și obiecte String în liniile 6 și 7, astfel încât acestea nu pot fi reciclate.

Articolul menționează un lucru ciudat ca finalizer. Întotdeauna am crezut că a fost ceva pe un astfel de destructor (bine, acolo este), dar timpul despre ea a scris, ar fi necesar să se înțeleagă. Nu am o mulțime de cunoștințe de Java experiență, dar am înțeles că este o carja rea. În general, aici sunt un cuplu de link-uri pe care mi-a plăcut (poate altcineva altceva va sfătui).
habrahabr.ru/post/183344/
ru.wikipedia.org/wiki/.0%A4.0%B8.0%BD.0%B0.0%BB.0%B8.0%B7.0%B0.1%82.0%BE.1%80

Ar trebui să aveți câteva întrebări la sfârșit, pentru fixare. Am ghicit dintr-o dată, și a vrut imediat să mă testeze chiar!

Pentru un incepator despre Finalize () nu este clar (eu ar trebui să citească în altă parte

Um ... de ce în obiectul explicație trebuie să fie eliminate după stroki5, dacă după 4 uuzhe nimeni nu se referă la el?

În cazul în care codul este scris în mod diferit: b = a, atunci a = nul, iar apoi a = c ... apoi Integer (100), obiectul este încă acolo după eliminarea trimiterii la variabila „a = null», Integer (100) ar fi în schimbare „b = o ». Deasupra caz format, obiectul este pierdut după o = nul

Nu înțeleg de ce răspunsul 1? Explică, te rog.
Iată logica mea:
1. Integer după 4 linii și nu se mai face referire. (Integer trebuie distruse)
2. După ce puțul este atribuit ca pe linia 6 deja menționată b. (Se pare că, în variabila String nu mai face referire).
3. Apoi, b se referă la fântână, și se pare că a = a! (B la o variabilă lungă nu este menționată).
Unde este greseala? Nu înțeleg de ce obținem un răspuns care este distrus numai Integer.

articole similare