>  기사  >  Java  >  JVM 고급 기능-3. 가비지 컬렉션의 객체 생존 알고리즘

JVM 고급 기능-3. 가비지 컬렉션의 객체 생존 알고리즘

巴扎黑
巴扎黑원래의
2017-06-26 11:34:111497검색

1. 개요

런타임 데이터 영역에서는 프로그램 카운터, 가상 머신 스택, 로컬 메소드 스택이 모두 스레드로 생성되고 소멸됩니다.

따라서 메모리 할당 및 재활용이 확실하고, 재활용될 때 재활용됩니다. 메소드 또는 스레드가 종료됩니다. Java 힙 및 사각형 영역은 불확실합니다. 프로그램 실행 중에 생성되는 개체의 크기는 프로그램이 실행될 때만 알 수 있습니다. 개체가 살아 있는지 확인하는 데에는 참조 계산 방법과 도달 가능성 분석 알고리즘의 두 가지 주요 알고리즘이 있습니다.

참조 계산 방법

참조 카운터는 개체가 한 번 참조될 때마다 카운터 값이 1씩 증가하고 참조 만료는 1씩 감소합니다. 카운터가 0이면 다시 사용되지 않는다는 의미입니다.

  • 접근성 분석 알고리즘

  •   접근성 분석 알고리즘은 주류 구현입니다. 이 알고리즘은 GC ROOT가 되는 노드를 루트 노드로 사용하며,

 이 루트 노드에서 아래로 검색합니다. 객체 GC ROOT에 연결된 참조 체인이 없는 경우(즉, 도달할 수 없는 경우) GC ROOT로 사용할 수 있는 객체는 다음과 같습니다.

  • 가상 머신 스택의 로컬 변수 테이블 참조 객체

메소드 Exclusive의 클래스 정적 속성 참조

메소드의 열기 객체

    로컬 메소드의 참조 객체

    • 현재 사용 가능한 도달성 분석 알고리즘이 주류 알고리즘이 되었습니다. 그 이유는 참조 카운터 알고리즘이 서로 참조하는 객체의 문제를 해결할 수 없다는 것입니다. 그러면 그는 연결된 참조 체인이 없다는 것을 알게 됩니다. 필터링 조건은 finalize() 메소드를 실행해야 하는지 여부입니다. 객체가 finalize 메소드를 포함하지 않거나 finalize 메소드가 호출된 경우,

    •   그러면 다음과 같이 간주됩니다. 실행할 필요가 없다고 판단되면 F-Queue라는 큐에 넣습니다. 나중에 JVM
    •   은 이러한 객체를 실행하기 위해 우선 순위가 낮은 Finalizer 스레드를 자동으로 생성합니다. finalize 메소드를 사용하면 GC는 해당 객체를 F-QUEUE에 두 번째로 표시합니다. 이때 객체가 탈출할 수 없으면 재활용됩니다.

    • finalize() 메소드

    •   
    객체의 finalize 메소드는 시스템에 의해 자동으로 한 번만 호출된다는 점을 참고하세요.
         대신 try-finally로 기능을 완료할 수 있는 방법은 사용하지 않는 것이 좋습니다.

       

        

    위 내용은 JVM 고급 기능-3. 가비지 컬렉션의 객체 생존 알고리즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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