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 중국어 웹사이트의 기타 관련 기사를 참조하세요!