-
[Java_Basic]자바의 메모리 모델과 Object 클래스(윤성우의 열혈 Java 프로그래밍)Java/Basic 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"); } }
가비지 컬렉션은 빈번히 일어나지 않고, 소멸할 인스턴스가 생겨도 가비지 컬렉션으로 바로 이어지지 않는다.
'Java > Basic' 카테고리의 다른 글
[Java_Basic]자바의 기본 클래스(윤성우의 열혈 Java 프로그래밍) (0) 2021.01.23 [Java_Basic]자바 가상머신의 메모리 모델(윤성우의 열혈 Java 프로그래밍) (0) 2021.01.05 [Java_Basic]예외처리(윤성우의 열혈 Java 프로그래밍) (0) 2021.01.02 [Java_Basic]인터페이스와 추상 클래스(윤성우의 열혈 Java 프로그래밍) (0) 2021.01.02 [Java_Basic]클래스의 상속3 : 상속의 목적(윤성우의 열혈 Java 프로그래밍) (0) 2021.01.02