You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境运行Apache Arrow Java代码抛出初始化异常如何解决

问题根因

你遇到的一连串报错核心触发点是JDK模块访问权限限制:
JDK 9及以上版本引入了模块化系统,默认禁止未命名模块反射访问java.base模块下java.nio包的内部字段,直接导致Arrow的MemoryUtil类初始化失败。后续抛出的Writer空指针、内存泄漏异常都是初始化流程中断触发的连带错误,和你写的ListVector写入逻辑没有关系。

排查步骤
  • 执行java -version确认当前运行环境的JDK版本,若版本号≥9,即可确认命中模块权限限制问题
  • 核对pom中所有Arrow依赖的版本,若版本低于15.0.0,对JDK17及以上版本的适配存在已知缺陷,会大幅提高这类反射报错的概率
解决方案

按优先级从高到低选择即可:

方案1:添加JVM启动参数(最快生效,兼容所有Arrow版本)

在IDE运行配置、或者项目启动命令中追加以下JVM参数,开放对应模块的反射访问权限:

--add-opens=java.base/java.nio=ALL-UNNAMED
--add-opens=java.base/sun.nio.ch=ALL-UNNAMED
-Dio.netty.tryReflectionSetAccessible=true

如果使用IntelliJ IDEA,直接在Run/Debug Configurations面板的VM options栏填入上述参数,重启运行即可。

方案2:升级Arrow版本

将${arrow.version}升级到15.0.0及以上的稳定正式版,新版Arrow已经完成JDK9+模块化系统的适配,不需要额外添加启动参数即可正常完成内存模块初始化,同时修复了旧版本中初始化中断触发的空指针、资源释放失败问题。
升级时必须保证arrow-vector、arrow-memory-core、arrow-memory-netty三个Arrow相关依赖的版本完全一致,版本混装会触发类不兼容报错。

方案3:回退JDK版本到1.8

如果项目没有高版本JDK的强制要求,可以直接切换运行环境到JDK8,该版本没有模块化访问限制,Arrow所有版本对JDK8的兼容性最稳定,不需要额外配置即可直接运行示例代码。

补充说明

根因解决后,你贴的示例代码不需要做业务逻辑修改即可正常运行。之前抛出的内存泄漏报错,是try-with-resources触发资源回收时,内存模块未完成初始化导致回收流程中断产生的误报,不是代码本身存在内存泄漏问题,根因修复后该报错会自动消失。

内容的提问来源于stack exchange,提问作者Brijesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:24:19