TornadoVM 7.3 发布:Java 程序可直接跑原生 GPU 负载
TornadoVM 是一个面向 Java 的开源异构 GPU 编程框架。其 7.3 版本现在已经发布,这是该项目的一个重要里程碑。 InfoQ 此前曾于 2025 年 12 月和 2022 年对该项目进行过报道。 TornadoVM 可以在多核 CPU 和 GPU 上自动加速 Java 程序。它并非要取代现有的 JVM
TornadoVM 是面向 Java 的开源异构 GPU 编程框架,7.3 版本已正式发布。对项目来说,这是一个重要节点。InfoQ 曾在 2025 年 12 月和 2022 年两次报道过该项目。
TornadoVM 能在多核 CPU 和 GPU 上自动加速 Java 程序,它不替代现有 JVM,而是和 JVM 配合工作。框架在 Java 里提供了一套较完整的 GPU 编程生态,可搭配 OpenJDK、Graalvm、Temurin、Zulu 等主流 JDK 发行版。
具体做法是把 Java 代码卸载到硬件后端,同时管理 Java 堆与加速器之间的内存,并运行生成的计算内核。放到今天的云和机器学习场景里,这是一个有用的构建块。
开发阶段,TornadoVM 会把 Java 源码编译成 OpenCL 和 Apple Metal 后端代码。设计思路是让开发者先在笔记本上开发、用本地硬件资源,之后把代码部署到带 Nvidia GPU 的服务器上,拿到明显的性能提升。对现代机器学习负载来说,这就是“编写一次,到处运行”的一种落地方式。
第 7 版在架构上动了几个地方。后端用 Foreign Function & Memory(FFM)API 取代了 Java Native Interface(JNI),实验性的 JVM 编译器接口(JVMCI)依赖项也被去掉。
开发团队称,TornadoVM 现在“通过反射 + ASM + Unsafe 层获取所有编译器元数据”。在 21、25、26、27 这些受支持的 JDK 上,统一走这一条处理路径。
新版本还通过优化 CUDA 后端,加深了与 Nvidia 生态的整合。一方面支持 cuTile 编程模型(经由新的 TileContext),另一方面可以直接从 TornadoVM 任务图(TaskGraphs)里调用 cuBLAS、CUTLASS 等 CUDA 库。开发者可以按性能和可移植性的需要,把 JIT 生成的内核换成 CUDA 库调用,也可以把两者串起来。苹果的 MXL 库同样通过混合 API 获得了对应能力。此外,多 GPU 执行也是这一版新增的支持。
不过,并非所有 Java 计算都能从卸载中获益。最适合的是数据并行负载,比如迭代之间没有依赖关系的循环,这类循环可以在加速器上并行跑。
新版本的目标之一,是搭出一个符合 Java 编程惯例的 JVM 环境,用来访问 Nvidia 针对不同硬件平台优化过的库。目的是让 Java 开发者用上线性代数、快速傅里叶变换(用于信号分析)、深度神经网络,以及针对稀疏矩阵手动优化的矩阵乘法等能力。TornadoVM 已经和 Quarkus、Lang4j、Flink、Spring AI 等库完成集成,也可以通过 SDKMan 获取。
以 Apache Flink 与 TornadoVM 的集成为例,核心思路是这样:开发者照常用 Table API 写标准查询,再用一个配置标志说明该查询可能需要 GPU 加速。
计算任务到达任务管理器后,框架会检查所在节点有没有可用 GPU。如果有,就连接到库提供程序,由它分析查询的中间表示(IR),判断这次计算是否真的适合放到 GPU 上执行。
整体来看,TornadoVM 给 Java 程序员提供了四种针对 Nvidia GPU 的编程方式。第一种是并行 API,实际上就是给循环加注解,向编译器提示该循环有并行化的可能。长远看,这个简单 API 不足以让生产级应用达到预期性能,于是又有了内核上下文 API 和前文提到的 TileContext 等接口。
伴随 7.3 版本,TornadoVM 团队还推出了 jitLLM v2.0,这是基于 TornadoVM 构建的新一代 Java AI 推理引擎。团队把 jitLLM 定位为性能上能直接与 llama.cpp、Ollama 竞争的产品,以单个 JAR 文件的形式发布。
TornadoVM 和 jitLLM 都由 Beestream.ai 做商业化推广,这家公司由 TornadoVM 团队创立,属于衍生公司。
更多细节可以访问 TornadoVM 官网,也可以看近期比利时 Devoxx 大会的发布视频,其中包含用 TornadoVM 混合 API 从 Java 接入 NVIDIA 生态的内容。