szemétgyűjtő

szemétgyűjtő

szemétgyűjtő

Magatartásának a szemétgyűjtés (memória hasznosítás)


Java-programozó nem kell figyelnie, memória kiosztás, mert a szemétgyűjtő kezeli a memóriát automatikusan. A szemétgyűjtő fut egy Java virtuális gép (JVM). A szemétgyűjtő - egy alacsony prioritású folyamat, amely rendszeres időközönként fut, és felszabadítja a memóriát használt tárgyak, amelyek már nincs szükség.

Futás a szemétgyűjtő


JVM tipikusan indul szemétgyűjtés alacsony szinten szabad memória. De a munkát a szemétgyűjtő nem garantálja, hogy mindig lesz elég szabad memória.

Ha a memória nem elég, még gyógyulás után, a JVM dob OutOfMemoryError. Megjegyezzük, hogy szükségszerűen kiváltja a szemétgyűjtő legalább 1 alkalommal generálása előtt JVM kivételt.

Kérheti a kezdete a szemétgyűjtő, de nem lehet erőltetni meg a műveletet.

Query futtatja a szemétgyűjtő


Ahhoz, hogy egy lekérdezés, akkor hívja az alábbi módszerek valamelyikét:

Alkalmasság futtatni a szemétgyűjtő


Az objektum kell dobni, ha ez nem áll rendelkezésre élő közvetítés.

A tárgy lehet elhelyezve a különböző esetekben:

  • Ha egy referencia-típusú változó, amely utal az objektum beállítása „0”, a tárgy kell ártalmatlanítani abban az esetben, nincs más utalás is.
  • Ha a változó referencia típus, amely utal a létrehozott objektum egy linket egy másik objektumot, az objektum kell ártalmatlanítani abban az esetben, nincs más utalás is.
  • Létrehozott objektumok helyben eljárás ártalmatlanítására, amikor az eljárás befejeződik, kivéve, ha azokat exportálják ezt a módszert (azaz, visszatért vagy létrehozható, amint kivételt).
  • Tárgyak, amelyek hivatkoznak egymásra lehet elhelyezni, ha azok egyike sem áll rendelkezésre élő közvetítés.

Vegyük ezt a példát:

Ebben a példában, a tárgy Egész szám (integer), amely eredetileg utal O1 pointer lehet alávetni újrahasznosítás után sorban 3, mivel O1 most utal, hogy egy objektum String (karakterlánc). Annak ellenére, hogy az O2 létrehozott referencia nulla egy String (karakterlánc), nem lehet kezelni, o1 hivatkozik rá.

A lezárás


Java-technológia lehetővé teszi, hogy a véglegesítése () metódus (véglegesített), hogy a szükséges karbantartás előtt a szemétgyűjtő eltávolítja az objektumot a memóriából. Ezt a módszert nevezik az objektum számára a szemétgyűjtő, amikor a szemétgyűjtő kiszámítja, hogy a hivatkozás egy objektum nem több. Ezt írja le az Object osztályban, ami azt jelenti, hogy öröklődik minden osztályban. Alosztály felülbírálja véglegesítése () módszer, hogy megszabaduljunk a rendszer erőforrásait, vagy egy másik kezelés:

Ha a kivételt generált nem regisztrált véglegesítése (), kivéve figyelmen kívül hagyja és véglegesítése az objektum megszűnik.

véglegesítése () módszer csak akkor aktiválódik, ha élettartama alatt az objektum.

Használhatja a módszer véglegesítése () olyan tárgy, hogy megóvja az újrahasznosítási. De ebben az esetben, a szemétgyűjtő nem aktiválja a véglegesítése () irányulnak.

egyszer, mielőtt az objektum törlődik a szemétgyűjtő mindig aktiválódik véglegesítése () metódust. Azonban lehetséges, hogy a véglegesítése () metódus nem aktiválódik egy adott objektum minden alkalommal a létezéséről, hiszen nem lehet eltakarítani.


Ebben a részben, néztük a szemétgyűjtő folyamat arra utal, hogy a Java memória kezelési technikák. Szemétgyűjtő nem adható erővel. Találkoztunk különböző módokon kezelésére tárgyak ártalmatlanítani kell, és megtanulta, hogy a véglegesítése () módszer aktiválódik, mielőtt a tárgyat eltávolítják a szemétgyűjtő.

gyakorlat


Hány tárgyak lesznek elhelyezve, miután a 7-es vonal?

Lehetséges válaszok:


A. 0
B. 1
2 C.
D. 3
E. A kód nem lehet összeállítani

Helyes változat:
Magyarázat:


A három létrehozott objektumok vonalak az 1., 2. és 3., Csak egész objektumot kell ártalmatlanítani végén vonal 7. A változó link, egy, amely eredetileg hivatkoztak Egész objektum kifejezés a String objektum az 5. sor Így Integer Object recycleable után 5 sor, mivel nincsenek változók, amelyek hivatkoznak rá. A változók b és c utalnak tárgyak Long és a String objektumok 6 és 7 vezetékeken, így nem lehet újrahasznosítani.

A cikk megemlíti, egy furcsa dolog, mint a véglegesítő. Mindig azt hittem, hogy valami ilyen destruktor (na jó, ez van), de az idő róla írt, arra lenne szükség, hogy megértsék. Nem kell rengeteg tapasztalattal ismerete Java, de megértem, hogy ez egy rossz mankó. Általában itt van egy pár link, hogy tetszett (talán valaki mást tanácsot).
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

Meg kell egy pár kérdést a végén, a rögzítésre. Sejtettem egyszerre, és azonnal tesztelni akartam magam még!

Egy kezdő a véglegesítése () nem világos (Meg kell olvasni máshol

Hmm ... miért a magyarázat objektumot kell ártalmatlanítani után stroki5, ha miután 4 uuzhe senki utal rá?

Ha a kód van írva másképpen: b = a, akkor a = null, majd a = c ... akkor Egész szám (100), az objektum még mindig ott van, miután a hivatkozás eltávolítása a változó „a = null», Egész szám (100) lenne változás „b = a ». Fent tárcsázott esetben az objektum után elveszik a = null

Nem egészen értem, hogy miért a válasz 1? Magyarázza, kérem.
Itt a logika:
1. Egész 4 sor után, és már nem szerepelhet. (Egész meg kell semmisíteni)
2. Miután a jól van rendelve, hogy a 6-os vonal már említett b. (Kiderült, hogy a string változó már nem hivatkozik).
3. Ezután b utal, hogy a jól, és kiderül, hogy a = a! (B, hogy egy hosszú változó nincs megjelölve).
Hol van a hiba? Nem értem, hogy miért választ kapjon, hogy megsemmisül csak egész szám lehet.

Kapcsolódó cikkek