"안녕, 아미고!"

"안녕, 엘리. 나한테 할 얘기가 있니?"

"오늘 우리는 객체의 수명이라고도 하는 객체가 메모리에 머무르는 기간에 대해 이야기할 것입니다. 객체가 생성된 후 적어도 하나의 변수가 주소를 저장하는 한 객체는 존재(존재)합니다(적어도 하나의 더 이상 참조가 없으면 개체가 죽습니다. 다음은 몇 가지 예입니다."

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 개체는 생성된 후 한 줄 동안만 존재합니다. 개체를 참조하는 유일한 변수는 바로 다음 줄에서 null로 설정되므로 개체는 JVM(Java Virtual Machine)에 의해 파괴됩니다."

"Sammy 개체는 생성된 후 cat1 변수 에 저장됩니다 . 또는 더 정확하게는 변수에 대한 참조를 저장합니다. 몇 줄 후에 이 참조가 cat2 에 복사됩니다 . 그런 다음 다른 개체에 대한 참조가 저장됩니다. cat1 . 이제 cat2Sammy 를 참조합니다 . 마지막으로 개체에 대한 마지막 남은 참조는 기본 메서드의 마지막 줄에서 null로 설정됩니다."

"Missy 개체는 생성 후 한 줄에만 존재합니다. 다음 줄에서 cat2 변수는 다른 값으로 설정되고 Missy 에 대한 참조가 손실됩니다. 개체에 더 이상 액세스할 수 없으므로 쓰레기로 간주됩니다. 시스템(즉, 개체가 죽었습니다)."

"생성된 Ginger 개체는 메서드가 끝날 때까지 존재합니다. 메서드가 끝나면 cat2 변수가 소멸되고 Ginger는 그 직후에 소멸됩니다."

"알겠어요."

"하지만 메서드 내에서 Cat 개체를 만들고 인스턴스 변수에 참조를 저장하면 Cat 개체는 아직 살아있는 다른 개체에서 참조하는 한 계속 존재합니다."

"실제로 개체는 일반적으로 시스템에 의해 즉시 파괴되지 않습니다. JVM(Java Virtual Machine)은 때때로 '가비지 수집'을 수행하여 삭제 표시된 개체를 파괴합니다. 해당 프로세스에 대해서는 나중에 자세히 설명합니다."

"그리고 더 이상 변수가 개체를 참조하지 않으려면 변수를 null 로 설정하거나 다른 개체에 대한 참조를 할당할 수 있습니다."