Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Understanding "Optimizing Java" chapter 7 figures
1. Stack Heap
Initial Setup (from “Optimizing Java” Figure 7-1)
다른 자료들에서는 99.9% BFS 를 사용함
아무리 봐도 책은 black/gray 가 뒤집어 진것 같음
2. Stack Heap
Case 1: mutator thread 가 a 에서 c 로 가는 새로운 레퍼런스를 추가하는 경우
a
c
<원문>
(마킹 스레드에 의해) 이미 검정색으로 칠해진 객체가
mutator thread에 의해 하얀 객체를 참조하게
바뀔 수도 있습니다.
3. Stack Heap
a
c
Case 2: mutator thread 에서 b 객체를 새로 만든다면
b
Mark 도중에 새로 만들어진 객체는
자동으로 gray set 에 포함되어야 함 (자명)
4. Stack Heap
a
c
Case 3: mutator thread 에서 b->c 레퍼런스를 삭제해버린다면?! (아직 sweeping 안했음)
b
위 그림에서 새 흰색 객체(c)를 가리
키는 회색 객체 (b)의 레퍼런스를 모
두 삭제하면, 흰색 객체는 아직 접근
은 가능하나 이 알고리즘 규칙에 따
라 발견되지는 않을테니 결국 삭제
될 것입니다.
5. Stack Heap
a
c
Solution: a->c 레퍼런스가 발생할 때 write barrier 를 통해서 a 를 gray set 에 집어넣어야 한다.
b
Tri-color invariant 가 깨지지 않
음이 보장됨.
Write barrier 는 concurrent-
mark 가 수행되는 동안 JIT 에
의해 삽입되는 추가적인 코드