avatar

范伟彬个人网

https://fanweibin.cn

  • 首页
  • 归档
  • 链接
  • 关于
主页 JVM JIT 编译器 Jeandle
文章

JVM JIT 编译器 Jeandle

发表于 2025-08-21 更新于 2025-08- 21
作者 Administrator 已删除用户
16~20 分钟 阅读

GitHub 地址:

  • https://github.com/jeandle/jeandle-jdk

  • https://github.com/jeandle/jeandle-llvm

什么是 Jeandle?

Jeandle 是 Java 的即时编译器。它基于 OpenJDK 构建,利用 LLVM 编译器基础设施生成机器代码,旨在提供强大的编译优化并交付高性能代码。

系统设计

概述

Jeandle 是一个功能完备的 JIT 编译器,旨在支持所有 Java 语言特性,包括监视器(monitor)和异常处理(exception)等。此外,Jeandle 还将支持编译器的核心功能,如去优化(deoptimization)和栈上替换(On-Stack Replacement, OSR)。

Overview

在运行时,Jeandle 以 Java 字节码作为输入,生成二进制机器码作为输出。其工作流程如下:

  1. Jeandle 编译线程从任务队列中获取编译任务,并调用 JeandleCompiler::compile_method 方法开始编译过程

  2. 通过抽象解释器(Abstract Interpreter)将字节码转换为 LLVM IR(中间表示)

  3. 应用定制优化器对 LLVM IR 进行优化

  4. 将优化后的 IR 传递给 LLVM 后端进行代码生成

  5. LLVM 代码生成器返回的二进制代码经过解析和重定位后,存入代码缓存(Code Cache)中,供 JVM 管理和使用

定制优化器

Jeandle 的定制优化器包含两个主要组成部分:

  1. LLVM 标准优化过程:利用 LLVM 自身提供的成熟优化技术

  2. 专为 Java 语言设计的定制优化过程:包括逃逸分析(escape analysis)和类分析(class analysis)等针对 Java 特性的优化技术

这些定制优化技术能够更好地理解和优化 Java 程序的运行时行为,从而生成更高效的机器码。

垃圾回收支持

Jeandle 通过利用 LLVM 的 statepoint 基础设施来支持 HotSpot JVM 中的垃圾回收机制。这一设计确保了在进行垃圾回收时,能够准确地跟踪和管理 Java 对象的生命周期。

关于 LLVM statepoint 的更多详细信息,请参考官方文档:

LLVM Garbage Collection Documentation

LLVM Statepoints Documentation

通过这种设计,Jeandle 能够在享受 LLVM 强大优化能力的同时,完美兼容 JVM 的垃圾回收机制,为 Java 应用提供既高效又稳定的运行环境。

快速入门

获取源码与构建

Jeandle 由两个独立的代码仓库组成jeandle-llvm 和 jeandle-jdk。这两个仓库需要分别构建,构建过程与其上游仓库相同。需要注意的是,在构建 jeandle-jdk 时,必须使用 --with-jeandle-llvm=<directory> 选项指定 jeandle-llvm 的安装目录。

有关上游 LLVM 和 OpenJDK 的入门指南,请参考其官方文档:

  • LLVM: https://llvm.org/docs/GettingStarted.html

  • OpenJDK: https://openjdk.org/guide/

快速开始步骤

1. 克隆 jeandle-llvm 仓库
git clone https://github.com/jeandle/jeandle-llvm.git
2. 配置并构建 jeandle-llvm
cd jeandle-llvm
mkdir build
cd build
cmake -G "Unix Makefiles" -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX="/home/jeandle-llvm-install" -DLLVM_BUILD_LLVM_DYLIB=On -DLLVM_DYLIB_COMPONENTS=all ../llvm
cmake --build . --target install
3. 克隆 jeandle-jdk 仓库
git clone https://github.com/jeandle/jeandle-jdk.git
4. 配置并构建 jeandle-jdk
cd jeandle-jdk
bash configure \
      --with-boot-jdk=/usr/local/java-21-openjdk-amd64/ \
      --with-debug-level=release \
      --with-jeandle-llvm=/home/jeandle-llvm-install
make images

构建完成后,编译好的 JDK 可以在 jeandle-jdk 路径下的 build/linux-x86_64-server-release/images/jdk/ 目录中找到。

调试版本构建

jeandle-llvm 和 jeandle-jdk 必须配置相同的调试级别。要构建 Jeandle 的调试版本,请使用以下构建选项:

# 对于 jeandle-llvm

-DCMAKE_BUILD_TYPE="Debug"

# 对于 jeandle-jdk

--with-debug-level=slowdebug

支持的平台

Jeandle 目前仅支持 X86 架构。Aarch64 架构的支持正在计划中。此外,借助 LLVM 强大的生态系统和成熟的后端支持,其他后端也可以根据需求进行支持。

操作系统

架构

状态

Linux

X86

已支持

Linux

Aarch64

计划中

使用 Jeandle

要启用 Jeandle,需要使用 JVM 标志 -XX:+UseJeandleCompiler。

示例:Fibonacci 程序

public class Main {
    public static int fibonacci(int n) {
        if (n == 0) {
            return 0;
        } else if (n == 1) {
            return 1;
        } else {
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    }
    public static void main(String[] args) {
        int num = 10;
        for (int i = 0; i < num; i++) {
            System.out.print(fibonacci(i) + " ");
        }
    }
}

控制编译过程

要跳过解释器并控制哪些方法需要编译,可以使用以下命令运行 Jeandle:

javac Main.java
java -XX:-TieredCompilation -Xcomp \
     -XX:CompileCommand=compileonly,Main::fibonacci \
     -XX:+UseJeandleCompiler Main

输出结果

0 1 1 2 3 5 8 13 21 34

通过以上步骤,您就可以成功构建并使用 Jeandle 这一基于 LLVM 的新一代 JVM JIT 编译器,体验其带来的性能提升。

Java技术
Jeandle JIT JVM
许可协议: 
分享

相关文章

11月 6, 2025

JDK 25 新特性深度解析:Java 生态的又一次飞跃

发布日期:2025年9月16日 版本类型:长期支持版本(LTS) 支持周期:至少8年(至2033年9月) 前言:为什么 JDK 25 值得关注 JDK 25 是继 JDK 21(2023年9月)之后的最新长期支持版本,标志着 Oracle 将 LTS 发布周期从三年缩短至两年的战略转变。这个版本包含

8月 21, 2025

JVM JIT 编译器 Jeandle

GitHub 地址: https://github.com/jeandle/jeandle-jdk https://github.com/jeandle/jeandle-llvm 什么是 Jeandle? Jeandle 是 Java 的即时编译器。它基于 OpenJDK 构建,利用 LLVM 编译

8月 16, 2025

JDK 21 新特性

随着 Java 21 的发布,作为长期支持(LTS)版本,它带来了许多令人兴奋的新特性。这些新特性不仅增强了 Java 语言的功能性,也提升了开发者的编程体验。本文将深入解析 JDK 21 的主要新特性,帮助开发者快速了解和掌握这些重要更新。 1. 虚拟线程(Virtual Threads) 虚拟线

下一篇

Docker 安装 MySQL 详细教程

上一篇

连接 Docker 容器与宿主机 MySQL 的跨平台指南

最近更新

  • mvnd:让 Maven 构建速度提升 2-10 倍的神器
  • ZCF:零配置 Claude Code 工作流神器
  • Spring Boot 4.0 全面升级指南:拥抱现代化 Java 企业开发
  • JDK 25 新特性深度解析:Java 生态的又一次飞跃
  • 程序员必备的30+个MCP工具推荐

热门标签

MCP 并发编程 代码审查 版本对比 开发效率 DevOps 结构化并发 Claude Code JIT 后端开发

目录

©2025 范伟彬个人网. 保留部分权利。

使用 Halo 主题 Chirpy