Growth-Collectors / effective-java

repository for effective java study
3 stars 2 forks source link

아이템 8. finalizer와 cleaner 사용을 피하라 #8

Open HanaHww2 opened 1 year ago

eternalklaus commented 1 year ago

[Item 8] finalizer와 cleaner 사용을 피하라

finalize 메소드란?

권장: GC를 이용해서 메모리 회수하기

ObjectEx obj4; // ObjectEx 객체와 obj4 레퍼런스
obj4 = new ObjectEx(); // ObjectEx()클래스에 obj4레퍼런스 생성
obj4 = new ObjectEx(); // ObjectEx()클래스에 obj4레퍼런스 재 생성, 따라서 이전 관계는 끊어짐

// 언젠가 GC가 적절한 타이밈에 메모리를 회수해 줌

비권장: 소멸자를 호출해서 자원 회수하기

@Override
    protected void finalize() throws Throwable {
        System.out.println(" -- finalize() method --");
        super.finalize();
  }

finalizer 사용이 불러온 재앙

finalizer는 오히려 GC의 자원회수를 방해한다

finalizer를 사용한 보안 공격

안전망으로써의 cleaner 사용

참고: https://www.zehye.kr/java/2019/08/22/11java_constructor/

HanaHww2 commented 1 year ago

순환 참조 주의

YunDaHyee commented 1 year ago

그냥 다 안써야겠네요..

jioome commented 1 year ago

finalizer는 최대한 안 써야겠네요