HotSpot C2 컴파일러, KnownBits로 비트 단위까지 추론해 불필요한 AND 연산 제거
Hacker News opinions
이 최적화가 신경쓰이는 이유는 (x<<2)&-4 같은 패턴 자체가 꽤 드물고, 있어도 어셈블리 명령어 한두개 줄이는 정도인데 이걸 굳이 찾아내는 노력이 아깝다는 생각이 듦
이런 최적화 하나하나가 다른 최적화나 벡터화가 먹힐 확률을 높여주는 거임, 특정 케이스 자체보다 그 파급효과가 중요함
이거 특정 패턴 찾으려고 만든게 아니라 LLVM이랑 GCC에서 이미 쓰던 방식 그대로 C2에 가져온거고, 그 최적화 집합 전체가 돌면서 이런 결과가 자연스럽게 어셈블리에 떨어지는 거임
근데 이런 known bits 최적화는 왜 javac이 아니라 JIT에서 하는거임?
디버깅할때 그 라인에 브레이크포인트 걸고 변수 값 확인할 수 있어야 하니까 javac에서 미리 최적화해버리면 안됨, 게다가 JVM 1.0으로 컴파일된 옛날 클래스도 최신 JIT이 커버해줘야 하니까 javac은 최대한 단순하게 두고 JIT을 똑똑하게 만드는 방향으로 간거임