나는 오랫동안 Java에 관한 책을 읽지 않았습니다. 최근에 나는 James Gosling의 << Java 프로그래밍 언어 >>를 읽고 읽기 메모를 받았습니다. 이 부분은 쓰레기 재활용에 관한 것입니다.
1. 쓰레기 재활용
객체는 새로 사용하여 생성되지만 객체가 차지하는 메모리를 재활용하기위한 해당 삭제 작업은 없습니다. 객체의 사용을 완료하면 해당 객체에 대한 참조를 중지하면됩니다.
-> 다른 객체를 가리 키도록 참조를 변경하십시오
-> NULL에 대한 참조를 가리 킵니다
-> 메소드의 로컬 변수가 더 이상 존재하지 않도록 메소드에서 돌아갑니다.
핵심 사항 :
-> 실행 가능한 코드에서 객체에 도달 할 수 없으면 공간을 재활용 할 수 있습니다.
-> 쓰레기 재활용은 우리가 언급하는 것에 대해 걱정할 필요가 없다는 것을 의미합니다. 잘못된 참조는 삭제 된 메모리 공간에 대한 참조를 나타냅니다. 이 문제는 객체가 삭제 될 때 프로그래머가 직접 제어 할 수있는 시스템에 존재합니다.
-> 쓰레기 수집기 모델 : 참조 카운터 메소드 (원형 참조를 해결할 수 없음), Mark-and-sweep.
2. 요약
마무리 방법
-> 쓰레기 수집가가 물체를 도달 할 수없고 물체의 공간을 재활용 할 것이라고 판단하면 쓰레기 수집가는이 방법을 호출합니다.
->이 방법은 객체에서 사용하는 모든 비 메모리 리소스를 지우고 각 객체마다 한 번만 호출 할 수 있습니다. 이 메소드의 실행이 객체에 다시 도달 할 수있게하고 즉시 다시 도달 할 수 없게 되더라도 메소드는 한 번만 호출 할 수 있습니다.
-> finalize 메소드는 특정 기간에 호출 할 수 있으며 절대 호출 할 수 없습니다 (Java Virtual Machine Ends).
최종 메소드를 재정의합니다
-> 물체가 쓰레기가되면 다른 물체도 쓰레기가 될 가능성이 높습니다. 이 쓰레기는 우리가 쓴 최종 방법을 부르기 전에 종료되었을 수 있으므로 예측할 수없는 상태 일 수 있습니다.
-> 과복 최종 메소드는 Super.Finalize 메소드를 추가하는 것입니다. 마침내 문장에 추가하는 것이 가장 좋습니다. 슈퍼 클래스로 선언 된 일부 컨텐츠를 종료 할 수 있는지 확인하십시오.
III. 쓰레기 수집기와 상호 작용하는 관련 클래스 및 방법
클래스 : runtime.getRuntime (), 시스템
방법 : gc (), runfinalization (), freememory (), totalmemory (), maxmemory ()
시스템 클래스는 정적 gc () 및 runfinalization () 메소드를 지원하며 현재 런타임 객체에서 해당 메소드를 호출합니다.
IV. 접근성 상태 및 기준 객체
객체는 참조가 지정할 때만 수집 할 수 있지만 때로는 객체를 가리키는 선택된 참조가 여전히있을 때 물체를 쓰레기로 수집하고 싶을 수도 있습니다.
참조 객체의 유일한 목적은 참조라는 다른 객체에 대한 참조를 유지하는 것입니다. 일반적으로 필드 또는 로컬 변수를 통해 객체에 대한 참조를 유지하지만 이제는 참조 객체에 대한 직접 참조를 유지할 수 있습니다. 쓰레기 수집기는 객체에 대한 잔류 참조가 기준 객체면을 통해 물체를 참조하는지 여부를 결정할 수 있으므로 물체를 재활용할지 여부를 결정할 수 있습니다. 기준 객체의 강도는 쓰레기 수집기의 동작을 결정하고 일반적인 참조는 가장 강력한 참조입니다.
참조 수업
-> 패키지 : java.lang.ref
-> 일반적인 방법 : get (), clear (), enqueue (), isenqueued ()
인용 및 접근성 강도
-> 객체는 강력하게 도달 할 수 있습니다 : 일반 참조
-> 객체는 부드럽게 도달 할 수 있습니다 : 소프트로 회의
-> 객체는 약하게 도달 할 수 있습니다 : 약점
-> 객체는 사실상 액세스 할 수 있습니다 (Phantom Reachable) : Phantomreference
-> 객체는 도달 할 수 없습니다. 참조 링크 없음 객체가 약하게 액세스 할 수있게되면 (또는 열 약) 종료 될 수 있습니다. 종료 후 물체를 도달 할 수없는 경우 재활용 할 수 있습니다.
객체 도달 성 위상은 가비지 수집기가 관련 참조 객체 유형에서 적절한 동작을 수행하도록 트리거합니다.
-> 소프트 리치 가능한 물체는 쓰레기 수집기에 의해 재활용 될 수 있습니다. 우리가 확신 할 수있는 것은 외부 메모리 오류를 던지기 전에 Softreference 객체에 대한 모든 softreference가 지워질 것입니다.
-> 접근 가능한 물체는 쓰레기 수집기에 의해 재활용됩니다.
-> 가상 도달 가능한 객체는 참조 객체에 phantomreference를 통해 액세스 할 수없고 Get 메소드가 항상 null을 반환하기 때문에 실제로 도달 할 수 없습니다. 그러나 가상 참조의 존재는 가상 참조를 명시 적으로 지우기 전에 객체가 재활용되는 것을 방지 할 수 있습니다. 가상 참조를 통해 마무리 방법을 호출 한 객체를 처리 할 수 있으므로 "죽었다"고 생각하는 것이 안전합니다.