C4: The Continuously Concurrent Compacting Collector


개요

C4 GC는 The Pauseless GC Algorithm논문을 개선하여, Multi generational support와 Linux OS Modification에 대한 Detail그리고 X86 64시스템에 적용시킨 논문이다.

Motvation & Importance & Main Idea

The Pauseless GC Algorithm논문 참고

Design

Multi-generational support
Pauseless GC와는 다르게, 여러개의 Yound, old generation을 지원하여셔, 더 큰 Throughput을 제공하였다.
Linux OS Modification
Relocate & Remap과정에서 mremap()을 엄청 부르는데, 이 시스템 콜은 TLB Flush, Only support small size remap, and single-threaded within a process의 문제가 있었다. 이를 해결하기 위해서 batching API를 구현하여서, 커널에서 여러개의 mremap오퍼레이션을 배칭으로 처리하고, 하나의 commit포인트에서 기존 page table과 swap하는 방식으로 훨씬 성능면에서 우월한 API를 구현, GC에 적용시켰다.
X86 64 Support
필연적으로 load barrier가 필요하기 때문에, Pauseless GC와 C4 GC는 load barrier를 구현하여야 한다. pauseless gc는 특수 하드웨어를 이용하였지만, x86 64에서는 JVM이 Runtime에 binaray instrumentation으로 load barrier를 소프트웨적으로 구현하도록 하여서 load barrier를 구현할 수 있도록 하였다.

Conclusion

C4 GC는 Pauseless GC알고리즘을 x86 64에 구현할때 고려해야할 디테일을 서술한 논문이다. OS수정이 필요하다는 점과, load barrier로 인한 오버헤드가 있을 것이라 예상된다는 한계가 있지만, 기존의 JVM에서 고질적인 문제였던 stop-the-world문제를 극복하였다는 점에서 큰 의의를 찾을 수 있다.