GraalWasm 与 WebAssembly 运行时

共 33 题
#

1. 多语言代码的可观测与错误栈跨语言

A 每种语言栈独立,无需关联
B 跨语言错误无法追踪
C 需统一 Trace ID 跨语言透传、统一日志格式,并用 PolyglotException 保留原始异常栈便于定位 ✓ 正确答案
D 可观测性与语言无关,无需透传
#

2. 多语言场景下的 GC 与内存视角

A 所有语言共享一个 GC
B 跨语言对象无需管理引用
C 多语言内存无额外开销
D 各语言运行时各自管理堆,跨语言对象引用需宿主 GC 追踪,多语言堆叠加导致内存占用需权衡 ✓ 正确答案
#

3. Arena 内存生命周期管理与内存泄漏防护

A Arena 需要手动释放每个 segment
B Arena 与内存泄漏无关
C Arena 只能在 JNI 中使用
D Arena 定义作用域,关闭时自动释放该作用域所有 segment,并提供访问检查防泄漏与悬垂 ✓ 正确答案
#

4. FFM API 的 MemorySegment 替代 JNI 直接访问 native

A MemorySegment 通过作用域与访问检查安全地直接访问 native 内存,配合 Linker 声明式调用,替代繁琐的 JNI 桥接 ✓ 正确答案
B FFM 仍需手写 C 桥接
C MemorySegment 与 JNI 无关
D MemorySegment 只能访问 Java 堆
#

5. FFM 的 VarHandle 访问结构化内存布局

A VarHandle 只能访问基本类型
B 布局无需声明即可访问
C 用 MemoryLayout 描述结构体布局,VarHandle 按字段路径类型安全地读写,替代手写偏移量 ✓ 正确答案
D VarHandle 无法访问结构体
#

6. FFM 相比 JNI 的安全性与性能优势

A FFM 提供类型安全与作用域检查、纯 Java 声明式调用且性能接近/优于 JNI,是替代 JNI 的主流方向 ✓ 正确答案
B FFM 仍需手写 C 桥接
C FFM 安全性不如 JNI
D FFM 比 JNI 性能差很多
#

7. JS/Python 调用 Java 对象的方法与类型映射

A JS 无法调用 Java 方法
B 通过 Polyglot 互操作,JS/Python 用 Java.type 等调用 Java 方法,标量/对象/数组/方法按规则映射 ✓ 正确答案
C 类型映射无需任何规则
D 跨语言调用无类型转换差异
#

8. Linker 与 FunctionDescriptor 定义 native 函数签名

A Linker 只做内存分配
B FunctionDescriptor 描述 native 函数签名,Linker 生成 downcall 句柄调用 native 函数 ✓ 正确答案
C FunctionDescriptor 与函数签名无关
D FFM 无法调用 C 库
#

9. Polyglot 上下文的资源管理与线程安全

A Context 默认非线程安全,需每线程独立或同步访问,并用 close 释放其运行时资源 ✓ 正确答案
B Context 天然线程安全
C Context 无需释放资源
D 多线程可共享同一 Context 无竞争
#

10. 使用 FFM 调用 C 库(如 zstd/opencv)的案例

A FFM 无法调用 C 库
B 通过加载库、downcallHandle 定义函数签名、MemorySegment 分配缓冲区、调用并解析结果来复用 C 库 ✓ 正确答案
C FFM 调用 C 库仍需 JNI
D 调用 C 库只需一次声明无需内存处理
#

11. 多语言互操作的典型落地场景评估

A 多语言互操作无任何成本
B 所有场景都应使用多语言
C 多语言只用于脚本
D 典型场景是脚本嵌入、native 库复用、多语言生态复用与 WASM 沙箱,评估要看收益是否大于复杂度 ✓ 正确答案
#

12. 多语言互操作的性能与隔离边界

A 多语言互操作无性能开销
B 跨语言调用有桥接与类型转换开销,隔离越强性能开销越大,需按可信度选择隔离级别并减少跨语言调用 ✓ 正确答案
C 所有多语言都应使用最强制隔离
D 隔离不影响性能
#

13. 多语言混合构建(Maven/Gradle)的插件配置

A native image 不支持多语言
B 多语言构建无需插件
C 用 graalvm-maven-plugin 或 org.graalvm.buildtools.native 集成多语言,并配置 native image 的元数据与语言资源 ✓ 正确答案
D Gradle 无法构建多语言
#

14. 多语言调用的安全沙箱与权限控制

A 通过 Context 访问开关与 WASM 沙箱做能力隔离,用资源限制与最小权限控制不可信代码 ✓ 正确答案
B 多语言代码天然安全
C 沙箱无需限制资源
D 不可信代码可访问全部宿主能力
#

15. FFM 在 JDK 25/26 的正式状态与启用参数

A FFM 在 JDK 26 被移除
B FFM 在 JDK 25 仍是孵化 API
C FFM 无需任何参数即可访问 native
D FFM 已是正式 API,使用 native 访问需配置 --enable-native-access 授权,否则会有警告 ✓ 正确答案
#

16. Java 调用 JavaScript(GraalJS)的 Context 与 Value

A Value 只能表示标量
B Context 执行 JS 脚本,Value 封装跨语言类型并支持 execute/getMember 调用与访问 ✓ 正确答案
C Java 无法把对象传给 JS
D Context 不需要关闭
#

17. 脚本嵌入(规则/模板)使用 GraalJS 的取舍

A GraalJS 让规则动态可配省去发布,但需权衡性能(缓存)、安全(沙箱)与维护成本 ✓ 正确答案
B 脚本嵌入无任何额外成本
C 脚本在性能敏感路径也最优
D 规则固定场景也适合用脚本
#

18. FFM 与 Vector API 协同处理 native 数组

A FFM 自带 SIMD 计算
B FFM 提供 native 内存访问,Vector API 用 SIMD 向量化计算,两者协同高效处理 native 数组 ✓ 正确答案
C Vector API 无法访问 native 内存
D 两者无法协同
#

19. GraalVM Truffle 语言实现(JS/Python/R)互操作

A Truffle 只能实现一种语言
B 各语言互操作无统一机制
C Truffle 框架让各语言共享 Graal 编译器与统一 Interop 协议,实现 JS/Python/R 等无缝互操作 ✓ 正确答案
D 互操作与编译无关
#

20. GraalVM 安装与 polyglot 镜像构建流程

A native image 不支持多语言
B 安装 GraalVM 后,用 native-image 编译时启用语言运行时(--language:*)并配置 reflect/resource 元数据构建 polyglot 镜像 ✓ 正确答案
C polyglot 镜像无需元数据配置
D GraalVM 只能运行一种语言
#

21. GraalVM 的 GraalWasm 运行 WebAssembly 模块的原理

A GraalWasm 是独立于 GraalVM 的运行时
B GraalWasm 不基于 Truffle
C GraalWasm 无法执行 WASM
D GraalWasm 基于 Truffle 把 WASM 解析为 AST,用自优化解释器执行并可由 Graal 编译器优化 ✓ 正确答案
#

22. GraalWasm 与 Wasm 运行时 在 JIT(AOT vs Lazy compilation)模式下的运行时开销与启动延迟?

A AOT 启动延迟更低
B Lazy/JIT 稳态性能一定更好
C AOT 启动延迟高但稳态性能好,Lazy/JIT 启动快但运行时开销有波动,按启动频率与稳态吞吐权衡 ✓ 正确答案
D 两种模式无差异
#

23. GraalWasm 与 Wasm 运行时 在 WASI Preview2、Component Model 上的沙箱与系统调用代理?

A WASM 可直接访问系统
B WASM 通过宿主注册的 WASI 函数代理访问系统,宿主控制能力权限,Component Model 让接口更结构化可组合 ✓ 正确答案
C Component Model 削弱隔离
D WASI 与沙箱无关
#

24. GraalWasm 的启动与内存隔离特性

A GraalWasm 解释执行启动快,每个 WASM 模块用独立线性内存且只能通过显式函数边界与宿主交互,实现强隔离 ✓ 正确答案
B WASM 模块可访问宿主 Java 堆
C GraalWasm 无内存隔离
D GraalWasm 启动慢
#

25. Java 与 WASM 之间的线性内存(Linear Memory)交互

A 线性内存不能共享给宿主
B Java 可直接访问 WASM 对象
C Java 通过 memory API 读写 WASM 的线性内存,按偏移量传递数据,WASM 函数处理后再写回 ✓ 正确答案
D Java 与 WASM 无法传数据
#

26. Truffle 的 AST 解释与部分求值(Partial Evaluation)

A 部分求值与编译无关
B Truffle 纯解释执行无优化
C AST 自优化消除动态开销,部分求值把解释器特化为针对该语言程序的机器码,获得接近原生性能 ✓ 正确答案
D AST 自优化会降低性能
#

27. WASM 与 JVM 沙箱(SecurityManager 移除后)的替代

A WASM 无法执行不可信代码
B WASM 沙箱比 Java 权限检查更弱
C SecurityManager 移除后无需沙箱
D WASM 以线性内存与显式函数边界提供强隔离,可安全执行不可信代码,替代被移除的 SecurityManager ✓ 正确答案
#

28. WASM 在 Java 中作为沙箱执行不可信代码的场景

A 不可信代码可直接访问宿主系统
B WASM 沙箱无法隔离内存
C 把不可信代码编译为 WASM,用受限导入函数与线性内存隔离执行,宿主控制能力,实现强隔离 ✓ 正确答案
D WASM 沙箱只适合可信代码
#

29. WASM 在插件化/规则扩展中的轻量隔离价值

A WASM 模块小、启动快、内存隔离强,比进程隔离轻比同进程代码安全,适合动态插件/规则场景 ✓ 正确答案
B WASM 隔离比进程隔离更强
C WASM 插件无法动态加载
D WASM 隔离开销比进程还高
#

30. WASM 在边缘/Serverless 函数运行时的应用

A WASM 启动快、资源低、隔离强、可移植,适合 Serverless/边缘函数运行时,替代容器/VM ✓ 正确答案
B WASM 启动比容器慢
C WASM 只能用于浏览器
D WASM 函数运行时无法隔离多租户
#

31. WASM 模块签名与版本管理

A WASM 模块无需签名
B 通过数字签名验签确认模块来源可信,用版本元数据管理多版本与回滚,保障供应链安全 ✓ 正确答案
C 版本管理只影响性能
D 签名与安全无关
#

32. WASM 的系统接口(WASI)与 Java 宿主函数

A WASM 通过 WASI 标准接口调用宿主(Java)注册的函数,宿主代理系统能力并做权限控制 ✓ 正确答案
B WASM 可直接访问系统
C 宿主函数与 WASI 无关
D Java 宿主无法控制 WASM 权限
#

33. native image 中嵌入多语言运行时的体积控制

A 多语言运行时体积无法控制
B 通过按需启用语言、裁剪未用资源与特性、只打包必要内容来控制体积,权衡体积与能力 ✓ 正确答案
C 嵌入所有语言体积最小
D native image 不支持多语言