Java 8에서 Loom 없이 가상 스레드 구현하기: Jactl의 Continuation 기법
Virtual Threads for a scripting language in Java 8 without Loom

Jactl은 Java 애플리케이션에 내장할 수 있는 스크립트 언어로, Java 8/11 환경에서도 이벤트 루프 스레드를 차단하지 않고 장기 실행 작업을 처리할 수 있도록 설계되었습니다. Java 21의 Virtual Threads가 없던 시절, Jactl은 Continuation 객체 체인을 이용해 스크립트의 실행 상태를 저장하고 복원하는 독자적인 비동기 메커니즘을 구현했습니다. 이 글에서는 예외를 활용해 호출 스택을 풀고, 각 함수의 상태를 Continuation에 저장한 후 작업 완료 시 체인을 따라 재개하는 방식과, 이를 확장한 체크포인트 기능까지 설명합니다. 또한 JMH 벤치마크를 통해 성능 영향을 측정한 결과를 공개합니다.
예외를 던지는 비용은 대부분 스택 트레이스를 생성하는 데서 발생하므로, 스택 트레이스를 채우지 않는 예외를 사용하면 실제로는 매우 효율적입니다.