Java/Basic
[Java_Basic]자바의 메모리 모델과 Object 클래스(윤성우의 열혈 Java 프로그래밍)
bangle0621
2021. 1. 6. 22:34
finalize 메소드
이전에 인스턴트는 힙영역에 존재한다는 것과 가비지 컬렉션이라는 것을 알게 되었다.
finalize 메소드는 이 가비지 컬렉션을 비워주는 역할을 하는 메소드이다.
자바 가상 머신에서는 굳이 이 메소드를 호출해주지 않아도 이 역할을 해주므로 굳이 사용할 필요는 없는 메소드이지만 가비지 컬렉션의 이해를 돕기 위한 개념으로 나오게 되었다.
임베디드 같이 작은 메모리 공간에서 작업할 때 사용하게 된다.
class Person{
String name;
public Person(String name){
this.name = name;
}
@Override
protected void finalize() throws Throwable{
super.finalize(); //상위 클래스의 finalize 메소드 호출
System.out.println("destroyed : " + name);
}
}
class ObjectFinalize{
public static void main(String[] args){
Person p1 = new Person("Yoon");
Person p2 = new Person("Park");
p1 = null; //참조대상을 가비지 컬렉션의 대상으로 만듦. 비워버림
p2 = null; //참조대상을 가비지 컬렉션의 대상으로 만듦. 비워버림
//System.gc();
//System.runFinalizaion();
System.out.println("end of program");
}
}

가비지 컬렉션은 빈번히 일어나지 않고, 소멸할 인스턴스가 생겨도 가비지 컬렉션으로 바로 이어지지 않는다.