Hva er Finalize i Java?

Hva er Finalize i Java?


Java bruker en søppelinnsamlingssystem for minnehåndtering. Selv om dette tar en eksepsjonell belastning av utbygger - han har ikke lenger å sikre gjenstander fjernes manuelt fra minnet når de ikke lenger er i bruk - det kan også ta bort noe av funksjonaliteten som utviklere fra andre bakgrunner kan være vant til. Mens sluttføre funksjonaliteten er ikke akkurat det samme som en C ++ destructor, kan det vurderes nærmest en analog Java-språket gir.

Oversikt over Garbage Collection

Søppelrydding er en av de mer avanserte emner i Java-programmering. Strengt tatt Java-utviklere kan gå hele karrieren uten at du trenger å vite mye om søppelinnsamler og hvordan den fungerer. I hovedsak er hvert objekt skapt i et Java-program registrert med Java runtime, sammen med en telling av alle steder det finnes en eksisterende referanse til dette objektet. Når et objekt er ikke lenger er referert til av andre gjenstander, markerer det system for innsamling, og neste gang søppel samleren går, det sletter dette objektet.

Grunnleggende minnehåndtering i C ++

Ting er annerledes i andre programmeringsspråk, for eksempel C ++, for eksempel. I C ++, utvikleren styrer når et objekt fjernes fra minnet, i motsetning til systemet. Dette er kjent som "deterministisk minnehåndtering", og det har både sine fordeler og ulemper. Den primære pluss-siden til dette er at det utvikler vet nøyaktig når i kode objektet er slettet. Men det er svært enkelt å slette et objekt som fortsatt kan være i bruk andre steder i koden.

Destructors og Finalize

I C ++, kan utviklere legge til en destructor til en klasse, som er en metode som kalles når et objekt er slettet. Dette gjør at utvikleren å kjøre kode når objektet ikke lenger er nødvendig, kanskje for å slette sine barn eller å rydde opp ressurser. I Java, gir systemet sluttføre metoden, som utviklere kan overstyre å gi tilsvarende funksjonalitet. Den primære forskjell er at sluttføre metoden kalles når den kjøretids fastslår at objektet har ingen ytterligere referanser og kan samles opp.

Bruk med forsiktighet

Mens sluttføre kan gi funksjonalitet som ligner på C ++ 's destructor, bør det egentlig brukes med forsiktighet. Generelt sett, mens overstyrer sluttføre metoden kan være helt greit for de fleste situasjoner, bør du ikke stole på det for å sikre ressurser er ryddet opp på et bestemt tidspunkt. For eksempel, hvis du har en databasetilkobling åpen i et objekt som er lukket i sluttføre, kan du likevel potensielt skape altfor mange tilkoblinger til databasen og bestå database grense før garbage collector har avsluttet alle objektene - selv om du ikke lenger har referanser til dem hvor som helst.