초록 열기/닫기 버튼

본 연구에서는 기존의 JAVA Full GC Parallel Compact를 대체할 수 있는 새로운 compact 방법을 제시한다. 기존 방법을 분석하고 문제점을 찾아내며 이를 해결하기 위해 compact를 병렬 처리하는 부분과 단독 처리하는 부분으로 분리한다. 병렬 처리 부분에서는 각 영역(region) 별로 영역 내부의 객체들을 독립적으로 처리하도록 하여 병렬성을 극대화한다. 그 뒤에 단독 처리 부분에서 개별적으로 처리된 영역들을 영역 앞쪽으로 모아 기존의 compact와 동일한 결과물을 만들게 한다. 이 때, 리눅스 커널에 구현한 페이지 테이블 조작 syscall 함수를 이용하여 하나의 쓰레드로도 효율적인 처리가 가능하게 한다. 평가를 위해 dacapo, specjvm2008 벤치마크와 Apache Spark 상에서 구현한 PageRank를 통해 실험하여 제안한 방법의 우수성을 보이고자 한다.


In this study, we propose a new compact algorithm that can replace existing the JAVA Full GC Parallel Compact. We first analyze the existing compact algorithm and characterize the inefficiencies of the algorithm. Then, to address these inefficiencies, we approach the problem into two parts by splitting the compact job into multi-threaded work and single-threaded work. In the multi-threaded part, we maximize parallelism by independently processing objects in regions. Then, in the single-threaded part, we move the regions to the start of space and obtain the same result with existing algorithm. In this process, we use page table manipulation for efficient region movement. Finally, we evaluate our scheme using dacapo, SPECjvm2008 benchmark, and PageRank on top of Apache Spark.