shadow$_monitor_, shadow$_klass_

안드로이드 API21부터 shadow$monitor(이하, monitor)와 shadow$klass(이하, klass) 변수가 추가되었다. 먼저, monitor 변수는 hashcode() 메소드에서 사용하기 위해 추가되었다.

klass 변수는 Brooks pointer라는 이름의 컨셉을 구현하기 위한 것으로 보인다. 이 컨셉에서 힙 메모리에 있는 모든 객체(object) 속의 klass 변수는 자기 자신 객체를 가리키는 역할을 한다. 그리고, GC를 위해 객체가 다른 장소로 이동(정확히는 복사 후 삭제)될 때 새로운 객체를 즉시 가리킨다. 이런 방법을 통해 “stop-the-world”를 피하는 동시에 어떤 스레드는 이전 객체(one in from-space)를 또 다른 스레드는 이후 객체(one in to-space)를 참조하는 불일치를 해결할 수 있다.

대신 두가지 단점이 있는데, 하나는 최소 하나의 객체 당 1워드의 힙메모리를 더 사용한다는 것과 객체를 읽고 쓰는데 추가적인 작업이 발생한다.

이에 대한 원문과 더 자세한 내용은 아래 참고를 참조하자. 참고로, Roman Kennke의 블로그에서는 이런 방법을 Shenandoah GC라고 부르고 이 GC의 일부로 Brooks pointer 컨셉이 사용된 것으로 보이나, 안드로이드 사이트에 이에 대한 언급은 따로 없다.

참고

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.