면접관: JVM 카드 테이블을 아시나요?

세대별 참고자료

객체들은 고립되지 않으며, 객체들 간에는 세대 간 참조가 있을 것이며, 신세대 영역에 국한된 수집(Minor GC)을 수행한다면 신세대에 있는 것들이 이전 세대에 의해 참조될 가능성이 충분히 있습니다. 이 영역에서 살아남은 객체를 찾기 위해서는 고정된 GC Roots 외에도 전체 Old Generation의 모든 것을 탐색하여 도달성 분석 결과의 정확성을 보장해야 합니다. JVM은 힙 메모리를 여러 세대로 나누는데, 객체 간 세대 간 참조가 있을 수 있는데, GC를 수행할 때마다 참조 여부를 확인하기 위해 전체 힙 스캔을 수행해야 합니까? 대답은 그렇지 않습니다. JVM은 카드 테이블 기술을 통해 이 문제를 해결합니다.

세대 간 인용 가설

세대 간 인용은 동일 세대 인용에 비해 매우 적은 수를 차지합니다. 상호 참조 관계가 있는 두 개체는 동시에 생존하거나 죽는 경향이 있어야 합니다. 예를 들어, 신세대 객체가 교차 세대 참조를 갖고 있다면, 구세대 객체는 죽기 어렵기 때문에, 그 참조를 통해 신세대 객체는 수집 과정에서 살아남다가 나이가 들면서 구세대로 승격된다. 이때 세대 간 참조 역시 무작위성이 제거됩니다. 따라서 이 가설에 따르면 우리는 더 이상 소수의 세대 간 참조를 찾기 위해 Old Generation 전체를 스캔해서는 안 되며, 각 개체가 존재하는지, 어떤 세대 간 참조가 존재하는지 기록하기 위해 공간을 낭비할 필요도 없습니다. 전역 데이터 결과(이 구조를 "메모리 세트"라고 하며, 아래에서 언급하는 "카드 테이블"은 "메모리 세트"의 구현입니다.) 이 결과는 Old Generation을 여러 개의 작은 블록으로 나누고 어떤 블록이 무엇인지 식별합니다. 구세대의 기억 조각 세대를 넘나드는 참고자료가 있을 것입니다. 그 이후에 일어날 것이다

Supongo que te gusta

Origin blog.csdn.net/uniquewonderq/article/details/130260199
Recomendado
Clasificación