>  기사  >  Java  >  Java 키워드 finalize를 사용하기 위한 샘플 코드

Java 키워드 finalize를 사용하기 위한 샘플 코드

黄舟
黄舟원래의
2017-03-15 13:24:271750검색

Java는 가비지 컬렉터가 메모리를 해제할 때 먼저 finalize를 호출하는 finalize 메서드를 제공하지만 몇 가지 오해가 있습니다.

1), 객체는 가비지 수집되지 않을 수 있습니다.

2) 가비지 컬렉션은 "파괴"와 동일하지 않으며 finalize는 소멸자가 아닙니다.

3) 가비지 컬렉션은 메모리에만 관련됩니다.

4) 가비지 수집 및 마무리는 모두 신뢰할 수 없습니다. JVM이 메모리를 모두 소모하지 않는 한 메모리 재활용에 시간을 낭비하지 않습니다.

finalize 호출 전제 조건:

1) System.gc() 실행 시와 같이 Garbage Collection에 의해 모든 개체가 자동으로 호출됩니다.

2) 프로그램 종료 시 각 개체에 대해 finalize() 메서드 호출

3) 명시적으로 finalize 메서드 호출

비 개체 정리를 완료하기 위해 finalize 메서드를 사용하는 것은 권장되지 않습니다. -메모리 리소스. 그러나 다음을 사용하는 것이 좋습니다. (1) 로컬 개체(JNI를 통해 생성된 개체)를 정리합니다. (2)

특정 비메모리 리소스(소켓, 파일, 포트 등)의 해제를 보장하기 위한 일반적인 형식

finalize() 메서드:

protected void finalize()
{
    //finalization code here
}

간단한 예제 코드:

public class FinalizationDemo {
    public static void main(String[] args) {
        Cake c1 = new Cake(1);
        Cake c2 = new Cake(2);
        Cake c3 = new Cake(3);
        c2 = c3 = null;
        System.gc(); //Invoke the Java garbage collector  
    }
}
class Cake extends Object {
    private int id;
    public Cake(int id) {
        this.id = id;
        System.out.println("Cake Object " + id + "is created");
    }
    protected void finalize() throws java.lang.Throwable {
        super.finalize();
        System.out.println("Cake Object " + id + "is disposed");
    }
}

실행 결과:

Cake Object 1is created
Cake Object 2is created
Cake Object 3is created
Cake Object 3is disposed
Cake Object 2is disposed


위 내용은 Java 키워드 finalize를 사용하기 위한 샘플 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.