이번 업데이트는 컴파일러에 여러 최적화 기능을 추가했다. 먼저 엔터프라이즈 에디션을 살펴보면 카운트 루프의 루프 제한 분석(loop limit analysis)을 개선해 컴파일러도 루프 이전의 제어 흐름을 분석하여 유도 변수를 추론할 수 있게 됐다. 이렇게 하면 계산되지 않은 더 많은 루프를 고급 최적화를 위해 수정할 수 있다고 개발팀은 설명했다.
또 일반적인 StringBuilder 패턴을 사용하는 코드 컴파일이 개선됐으며, JDK 11 기반 그랄VM 빌드에서 JDK 11의 압축 문자열을 인식하도록 해 이러한 패턴 지원도 강화했다.
커뮤니티 에디션에서는 루프 내부에서 외부로 루프 불변 가드를 이동해 관련 워크로드를 개선하는 ‘스펙큐레이티브 가드 무브먼트(speculative guard movement)’ 최적화가 추가됐다. long 카운트 루프의 안전 지점(safe-point) 제거 메커니즘도 개선됐다.
한편 쓰기를 루프 밖으로 이동시키는 ‘라이트 싱킹(write sinking)’ 최적화가 그랄VM 21.2에서 실험적 기능으로 제공된다. 순차 코드를 위한 새로운 SIMD(Single Instruction Multiple Data) 벡터화는 엔터프라이즈 에디션에서 사용할 수 있지만 아직 기본적으로 활성화되지 않았다고 개발팀은 덧붙였다.
네이티브 이미지(Native Image)와 관련해서는 ‘제이유닛(Junit) 5’ 테스트 지원과 함께 ‘그래들(Gradle)’ 및 ‘메이븐(Maven)’ 플러그인이 지난 6월 출시돼 애플리케이션의 기본 이미지 빌드를 단순화하고 기본 이미지 모드에서 제이유닛 테스트를 실행하여 코드 작동 방식을 확인할 수 있다.
또한 네이티브 이미지가 이제 이미지에서 불필요한 보안 공급자를 자동으로 제거한다. 연결할 수 있는 보안 공급자는 정적 분석에 의해 감지된다.
이어서 개발팀은 그랄VM 21.2의 클래스 사전 정의 구현은 런타임에 Classloader.loadClass 호출을 지원한다고 전했다. 런타임에 로드해야 하는 클래스는 빌드 시 정적 분석에 사용할 수 있어야 폐쇄된 ‘실제’ 분석에 포함되며, 그 외에는 임의의 런타임에 클래스를 로드하는 코드 패턴이 이제 네이티브 이미지에서 작동한다. 또 그랄VM 21.2에서는 -H:+AllowVMInspection으로 빌드된 기본 이미지가 이제 자바로 작성된 JFR(Java Flight Recorder) 이벤트를 지원한다고 덧붙였다.
이 밖에 그랄VM 21.2의 새로운 기능 및 개선 사항은 다음과 같다.
• 트러플(Truffle) 언어 구현 프레임워크에서 새로운 컴파일 큐 휴리스틱을 지원한다. 이는 많은 워크로드에서 다중언어(polyglot) 런타임의 워밍업 시간을 개선한다.
• 자바 온 트러플(Java on Truffle)용 핫스팟(HotSpot) 플러그인 API이 제공된다. 이를 사용하면 실행하고 있는 애플리케이션을 다시 시작할 필요 없이 개발 도중에 코드를 로드할 수 있다.
• 자바스크립트 구현에는 새로운 set 메소드와 연산자 오버로딩(실험적 기능) 등이 추가됐다.
• 루비의 경우 그랄VM 21.1는 이름별, 클래스별 가정을 사용한 루비 메소드 및 상수의 정확한 무효화를 포함해 호환성 및 성능을 개선했다.