"Hei, Amigo!"
"Hei, Ellie. Har du noe interessant å fortelle meg?"
"I dag skal vi snakke om hvor lenge et objekt forblir i minnet, også kjent som objektets levetid. Etter at et objekt er opprettet, eksisterer det (lever) så lenge minst én variabel lagrer adressen sin (det er minst en referanse til det). Hvis det ikke er flere referanser, dør objektet. Her er noen eksempler:"
public class MainClass
{
public static void main (String[] args)
{
┏ Tommy
┃ Cat cat = new Cat("Tommy");
┃ cat = null;
┗
┏ Sammy
┃ Cat cat1 = new Cat("Sammy");
┃┏ Missy
┃┃Cat cat2 = new Cat("Missy");
┃┃cat2 = cat1;
┃┗
┃┏ Ginger
┃┃cat1 = new Cat("Ginger");
┃┃cat2 = null;
┃┗
┗
}
}
"Tommy-objektet eksisterer bare for én linje fra det ble opprettet. Den eneste variabelen som refererer til objektet er satt til null i neste linje, så objektet blir ødelagt av Java Virtual Machine (JVM)."
"Sammy-objektet lagres i cat1- variabelen etter at det er opprettet. Eller, mer nøyaktig, variabelen lagrer en referanse til det. Et par linjer senere blir denne referansen kopiert til cat2 . Deretter lagres en referanse til et annet objekt til cat1 . Nå er det bare cat2 som refererer til Sammy . Til slutt settes den siste gjenværende referansen til objektet til null i den siste linjen i hovedmetoden."
"Missy-objektet eksisterer kun for én linje etter at det ble opprettet. På neste linje settes cat2- variabelen til en annen verdi, og referansen til Missy går tapt. Objektet kan ikke lenger nås, så det anses som søppel av system (dvs. objektet er dødt)."
"Når det er opprettet, eksisterer Ginger-objektet til metoden avsluttes. På slutten av metoden blir cat2- variabelen ødelagt, og Ginger blir ødelagt umiddelbart etter det."
"Jeg skjønner."
"Men hvis vi lager et Cat- objekt inne i en metode og lagrer en referanse til det i en forekomstvariabel, vil Cat- objektet eksistere så lenge det refereres til av et annet objekt som fortsatt er i live."
"Egentlig blir et objekt vanligvis ikke umiddelbart ødelagt av systemet. Java Virtual Machine utfører "søppelsamling" fra tid til annen, og ødelegger objekter som er merket for sletting. Mer om den prosessen senere."
"Og hvis vi ikke lenger vil at en variabel skal referere til et objekt, kan vi sette den til null , eller tilordne den en referanse til et annet objekt."
GO TO FULL VERSION