[JVM] JVM 끝까지 파헤치기 독서 #6 - 가비지컬렉션 심화탐구
·
CS/JVM
https://dev-dx2d2y-log.tistory.com/163 [Java] JVM 끝까지 파헤치기 독서 #5 - 가비지 컬렉터의 알고리즘 이론https://dev-dx2d2y-log.tistory.com/138 [CS] JVM 밑바닥까지 파헤치기 독서 #1 - 자바 런타임 메모리 영역C와 C++은 객체 (C에는 객체가 없지만)의 생성, 관리, 삭제까지 모두 관리할 책임을 가지지만, 자바에서dev-dx2d2y-log.tistory.com저번에는 가비지컬렉션의 기본적인 알고리즘 이론에 대해서 알아봤다면, 이번에는 핫스팟 알고리즘에 대해 보다 세부적으로 알아보고자한다. 그렇기 때문에 이 게시글은 전적으로 위의 게시글에 의존 중이다. 위 게시글의 최종 요약본인데, 1, 4, 7, 8, 9, 10번만 알면..
[JVM] 객체를 언제, 어떻게 표시할 것인가?
·
CS/JVM
JVM 내에서 도달 가능성 분석 알고리즘을 다시 정의해보자면 https://dev-dx2d2y-log.tistory.com/165 [JVM] OopMap으로 참조체인 내 속한 객체 찾기루트 노드 열거GC를 시작하려할 때 가장 기본이되는 것이 GC루트를 기준으로 '도달 가능성 알고리즘'을 실행시키는 것이다.루트 노드 열거는 도달 가능성 알고리즘을 구현하기 위해서 GC 루트집dev-dx2d2y-log.tistory.com도달 가능성 분석 알고리즘을 사용하기 위해서는 GC루트들을 찾고 (루트노드열거), OopMap을 통해서 그 참조체인의 관계까지 알아두어야한다. 이 과정에서 스레드는 모두 정지해있어야한다. 그 중에서 참조체인을 찾는 과정에 집중해보자면, 마크-스윕, 마크-카피, 마크-컴팩트 알고리즘 등에서도 ..
[JVM] JVM 내에서 카드테이블과 사전장벽, 사후장벽이란?
·
CS/JVM
기억집합 (카드테이블)https://dev-dx2d2y-log.tistory.com/162 [JVM] GC의 객체회수과정은 어떻게 일어나는가? - 마크-스윕, 마크-카피, 마크-컴팩트https://dev-dx2d2y-log.tistory.com/163 [Java] JVM 끝까지 파헤치기 독서 #5 - 가비지 컬렉터의 알고리즘 이론https://dev-dx2d2y-log.tistory.com/138 [CS] JVM 밑바닥까지 파헤치기 독서 #1 - 자바 런타임 메모리 영역C와 C+dev-dx2d2y-log.tistory.com힙 메모리 영역에서 구세대의 GC루트를 전부 스캔하는 것을 방지하고자 구세대와 신세대 간 참조관계를 기억해두기 위해서 기억집합을 사용한다고했다. 기억집합이란 구세대에서 신세대를 가리..
[JVM] 가비지컬렉터는 어디에서 실행되어야하는가? - 안전지점(Safe Region)
·
CS/JVM
안전지점https://dev-dx2d2y-log.tistory.com/165 [Java] OopMap으로 참조체인 내 속한 객체 찾기루트 노드 열거GC를 시작하려할 때 가장 기본이되는 것이 GC루트를 기준으로 '도달 가능성 알고리즘'을 실행시키는 것이다.루트 노드 열거는 도달 가능성 알고리즘을 구현하기 위해서 GC 루트집dev-dx2d2y-log.tistory.com이전에는 OopMap을 통해서 어떤 과정으로 GC루트에서 연결된 객체를 찾는지에 대해서 알아보았다. 그런데.. 가비지컬렉터는 언제나 실행할 수 있을까?참조관계가 변경되는 모든 메모리마다 가비지컬렉션을 실행한다면 가장 이상적인 방법이겠지만, 컴퓨터의 메모리에는 한계가 있고, 가비지컬렉션을 실행시키는데에도 큰 자원이 소요될 것이다. (스레드가 정..
[JVM] OopMap으로 참조체인 내 속한 객체 찾기
·
CS/JVM
루트 노드 열거GC를 시작하려할 때 가장 기본이되는 것이 GC루트를 기준으로 '도달 가능성 알고리즘'을 실행시키는 것이다.루트 노드 열거는 도달 가능성 알고리즘을 구현하기 위해서 GC 루트집합으로부터 참조체인을 찾는 작업을 뜻한다. GC루트는 주로 전역참조(정적필드 등)와 실행 콘텍스트(스텍 프레임의 지역변수테이블 등)가 사용된다. 루트 노드 열거에서 가장 중요한 것은 참조체인을 조사할 때 객체들의 참조관계가 일관성을 유지해야한다는 것이다. 즉, 루트 노드 열거를 실행할 때의 모든 객체들은 추가되거나 삭제되는 것, 다른 객체와 참조관계를 형성하는 작업을 일절 수행하지 않는, 프래그램이 완전히 정지된 상태에서 실행되더야한다. 그리고 이것이 GC가 실행될 때 모든 사용자 스레드가 일시정지되는 이유다. 주류 ..
[JVM] JVM 끝까지 파헤치기 독서 #5 - 가비지 컬렉터의 알고리즘 이론
·
CS/JVM
https://dev-dx2d2y-log.tistory.com/138 [CS] JVM 밑바닥까지 파헤치기 독서 #1 - 자바 런타임 메모리 영역C와 C++은 객체 (C에는 객체가 없지만)의 생성, 관리, 삭제까지 모두 관리할 책임을 가지지만, 자바에서는 JVM이 대체적으로 이 역할을 수행한다. JVM에 대해서 배우면서 가장 먼저 자바 메모리 영역dev-dx2d2y-log.tistory.com저번에는 자바 메모리 구조와 자바에서 객체를 어떻게 저장하고 불러오는지에 대해서 알아보았다. 추가로 각 메모리 영역별 오버플로우에 대해서도 알아보았고. 앞으로 당분간은 가비지컬렉터와 메모리 할당에 대해서 알아보도록한다.가비지컬렉터(GC)는 메모리영역에서 더 이상 참조되지 않는 객체를 찾아서 삭제하고 메모리 공간을 확보..
[JVM] GC의 객체회수과정은 어떻게 일어나는가? - 마크-스윕, 마크-카피, 마크-컴팩트
·
CS/JVM
https://dev-dx2d2y-log.tistory.com/163 [Java] JVM 끝까지 파헤치기 독서 #5 - 가비지 컬렉터의 알고리즘 이론https://dev-dx2d2y-log.tistory.com/138 [CS] JVM 밑바닥까지 파헤치기 독서 #1 - 자바 런타임 메모리 영역C와 C++은 객체 (C에는 객체가 없지만)의 생성, 관리, 삭제까지 모두 관리할 책임을 가지지만, 자바에서dev-dx2d2y-log.tistory.com가비지컬렉션은 '도달 가능성 분석 알고리즘'을 따른다. 이의 세부적인 구현방식은 GC에 따라서, 가상머신에 따라서 차이가 있다. 앞으로 몇 개의 게시글에서 이 가상 머신의 GC 알고리즘에 대해 알아보기로한다. 상세이론은 리처드 존스(Richard Jones) 등의 ..
[JVM] 참조 카운팅 알고리즘과 파이썬의 순환 검출 알고리즘에 대해서
·
CS/JVM
가비지 컬렉션에 대해서 배울 때, 객체가 '죽었는지' 여부를 판단하기 위해서는 그 판단 기준이 필요하다.이 '죽었는지'는 프로그램 코드에서 어떠한 방식으로도 객체가 다시 사용될 수 없는, 즉 아무 변수도 해당 객체를 참조하지 않아 더이상 해당 객체에 접근할 수 없다는 뜻이다.죽었는가? - 참조 카운팅 알고리즘 (기본)이 '죽었는지' 판단하는 알고리즘 중에 하나가 바로 참조 카운팅 알고리즘.대략적인 순서는 이렇다.1. 객체를 가리키는 참조 카운터(reference counter)를 추가하고, 참조하는 곳이 하나씩 늘어날 때마다 참조 카운터의 값을 1씩 증가시킨다.2. 참조하는 곳이 하나 사라질 때마다 카운터 값을 1씩 감소시킨다.3. 카운터 값이 0이 되면 객체는 사용될 수 없다 ==> 가비지 컬렉션의 대..