TornadoVM has reached version 7.3, turning standard Java programs into workloads that run natively on multi-core CPUs and GPUs. The open-source framework works alongside OpenJDK, GraalVM, Temurin or Zulu, offloading code to hardware backends and managing memory between the Java heap and accelerators. For companies running cloud and machine learning workloads on Java, this matters because existing code can gain GPU performance without leaving the JVM ecosystem.

TornadoVM 7.3 Brings GPU-Native Execution to Java Applications

How TornadoVM 7.3 offloads Java to GPUs

The framework compiles Java source during development to OpenCL and Apple Metal backends, then deploys the same code to servers with Nvidia GPUs for higher performance. Developers can build on a laptop with local hardware and move to GPU servers later, which the team presents as Write Once, Run Anywhere for modern ML workloads. Version 7 replaces the Java Native Interface with the Foreign Function and Memory API and removes the experimental JVM Compiler Interface dependency.

Compiler metadata now comes through a single reflection plus ASM plus Unsafe layer, uniform across supported JDK versions 21, 25, 26 and 27. The release adds an optimized CUDA backend with support for the cuTile programming model through a new TileContext. Developers can call CUDA libraries such as cuBLAS and CUTLASS directly from inside TornadoVM TaskGraphs, swapping JIT-generated kernels for library calls or chaining both approaches. The same hybrid API pattern supports Apple MXL, and multi-GPU execution is now available.

Not every Java computation suits offloading, with data-parallel loops without dependencies between iterations named as the best candidates. Recent versions aim to give JVM developers idiomatic access to Nvidia-tuned libraries for linear algebra, Fast Fourier Transforms for signal analysis, deep neural networks and sparse matrix multiplication. TornadoVM integrates with Quarkus, LangChain4j, Flink and Spring AI and is distributed through SDKMAN. The Flink integration shows the model: a configuration flag marks a Table API query for potential acceleration.

What this means for Java-based AI workloads

For businesses with Java estates, the practical effect is a lower barrier to GPU use in analytics and AI inference without rewriting services in Python or C++. A Flink Table API query can be checked at the task manager for GPU availability, then analyzed through its intermediate representation to decide if acceleration fits. Small teams keep familiar frameworks and JDK distributions, while larger organizations can route suitable queries to GPU nodes and leave the rest on CPUs.

The choice of programming model affects results and portability, so teams should verify which path fits their workload. TornadoVM offers four ways to program Nvidia GPUs, starting with a parallel API annotation that hints a loop can run in parallel. That approach proved insufficient for production performance, leading to the kernel context API and TileContext for finer control. Direct CUDA library calls trade portability for tuned speed, and suitability still depends on data-parallel structure.

A marker to watch is adoption of jitLLM v2.0, the Java AI inference engine built on TornadoVM and shipped as a single JAR file. The team positions it against llama. cpp and Ollama on performance, while commercialization runs through the Beestream. ai spin-off. If Flink, Quarkus or Spring AI projects report production GPU acceleration and jitLLM gains users, Java-native GPU execution will have moved from framework option to operational practice.