用于 Java 的高性能可嵌入 WebAssembly 运行时

WebAssembly icon

优势

access icon

适用于 Java 的 WebAssembly

compatibility icon

支持 WebAssembly 1.0

完全兼容 WebAssembly 1.0,并支持许多功能扩展,包括 WASI
speed icon

JVM 上最快的 Wasm

Graal JIT 编译 Wasm 以实现本机代码速度
JavaScript integration icon

JavaScript 集成

通过JavaScript 绑定简化 WebAssembly 模块的使用
coffee beans icon

100% Java

完全用纯 Java 编写,零本机依赖

如何开始

您可以选择使用 WebAssembly 扩展您的 Java 应用程序,或直接进入入门项目

1. 从Maven Central添加 GraalWasm 作为依赖项

1. 从Maven Central添加 GraalWasm 作为依赖项

<dependency>
  <groupId>org.graalvm.polyglot</groupId>
  <artifactId>polyglot</artifactId>
  <version>24.2.1</version>
</dependency>
<dependency>
  <groupId>org.graalvm.polyglot</groupId>
  <artifactId>wasm</artifactId>
  <version>24.2.1</version>
  <type>pom</type>
</dependency>

implementation("org.graalvm.polyglot:polyglot:24.2.1")
implementation("org.graalvm.polyglot:wasm:24.2.1")

2. 创建一个 WebAssembly 模块,例如使用wat2wasm

2. 创建一个 WebAssembly 模块,例如使用wat2wasm

(module
    (func (export "addTwo") (param i32 i32) (result i32)
      local.get 0
      local.get 1
      i32.add))

3. 将 Wasm 模块嵌入到 Java 中

3. 将 Wasm 模块嵌入到 Java 中

import java.net.URL;

import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Source;
import org.graalvm.polyglot.Value;

try (Context context = Context.create()) {
    URL wasmFile = Main.class.getResource("add-two.wasm");
    String moduleName = "main";
    context.eval(Source.newBuilder("wasm", wasmFile).name(moduleName).build());
    Value addTwo = context.getBindings("wasm").getMember(moduleName).getMember("addTwo");
    System.out.println("addTwo(40, 2) = " + addTwo.execute(40, 2));
}