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");
	}
}

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