Java

Object클래스의 finalize() 메소드의 사용예제

bang2001 2013. 7. 25. 16:48

class FinalizeTest 

{
@Override
public void finalize() throws Throwable
{
System.out.println("finalize() 메소드 호출됨");
}

public static void main(String[] args) 
{
FinalizeTest ins = new FinalizeTest();
try
{
Thread.sleep(3000);
}
catch (InterruptedException e)
{
}
ins = null;

System.gc();

                System.out.println("제일 마지막 코드! 마지막 출력문이다.");
}
}//////////////////////////////

------------------------------------------------------------------------------------------

finalize() 메소드는 가비지 컬렉터가 객체를 소멸시키기 전에 호출이 되어집니다. 현재 위의 코드를 보게되면

finalize() 메소드는 main()메소드에서 호출이 되어있지 않습니다. 하지만 결과물을 보게 되면 finalize()

호출 된 것을 볼 수 있습니다. 그것은 위에서도 설명했다 싶이 finalize() 메소드가 객체를 소멸시키기 전

즉 가비지 컬렉터가 수행하기 바로 직전에 출력된 것을 볼 수 있습니다. 그리고 나서 마지막 문자열을 출력된 것을 볼 수 

있습니다. (3초간 스레드가 대기상태에 있도록 구현하였습니다. 가비지컬렉터가 수행되고 난 이후라는점을 강조하였습니다.)

그리고 가비지 컬렉터가 수행하게 되는 이유는  ins 참조변수에 null값을 넣어서 FinalizeTest객체를 

가비지 컬렉터의 대상이 되도록 하였습니다.

이 상태에서 System.gc(); 메소드를 사용하여 가비지 컬렉터가 수행(run)이 되도록 한 것입니다.

위와같은 사실로 finalize() 메소드가 언제 호출되는지 알 수 있습니다.

또한 finalize() 메소드의 사용용도는 객체가 소멸되기 바로 직전에 어떤 처리해야 할

코드가 있을때 사용되어집니다. 


'Java' 카테고리의 다른 글

interface 끼리의 상속관계  (0) 2013.07.25
StackOverflowError / SCJP 174번 문제  (0) 2013.07.25
접근지정자의 접근범위  (0) 2013.07.25
SCJP 80번 문제 / synchronized  (0) 2013.07.25
각종 예외의 발생조건과 의미  (0) 2013.07.25