Eclipse运行Java程序偶发Segmentation error(c0000139)求助
异常信息
Unhandled exception Type=Segmentation error vmState=0x00000000
Windows_ExceptionCode=c0000139 J9Generic_Signal=00000004
ExceptionAddress=00007FFA4A352856 ContextFlags=0010004f
Handler1=00007FF9D51EC9F0 Handler2=00007FFA0EAEAA50
RDI=00000161EA87AB78 RSI=00007FFA4A36D390 RAX=0000000000000000
RBX=0000000000000001 RCX=0000000000000002 RDX=0000000000000000
R8=00007FFA47AF6C4C R9=0000000000000000 R10=0000000000000000
R11=0000003B3D3ED788 R12=0000000000000003 R13=0000000000000003
R14=00007FFA17F1CE01 R15=0000000000000003 RIP=00007FFA4A352856
RSP=0000003B3D3EC0F0 RBP=0000003B3D3EC790 EFLAGS=0000059800000206
FS=0053 ES=002B DS=002B XMM0 00000161ec2395d0 (f: 3961755136.000000,
d: 7.510219e-312) XMM1 0000000000000000 (f: 0.000000, d: 0.000000e+00)
XMM2 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM3
0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM4 0000000000000000
(f: 0.000000, d: 0.000000e+00) XMM5 0000000000000000 (f: 0.000000, d:
0.000000e+00) XMM6 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM7 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM8
0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM9 0000000000000000
(f: 0.000000, d: 0.000000e+00) XMM10 0000000000000000 (f: 0.000000, d:
0.000000e+00) XMM11 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM12 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM13
0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM14 0000000000000000
(f: 0.000000, d: 0.000000e+00) XMM15 0000000000000000 (f: 0.000000, d:
0.000000e+00) Module=C:\windows\SYSTEM32\ntdll.dll Module_base_address=00007FFA4A250000 Offset_in_DLL=0000000000102856
Target=2_90_20220817_464 (Windows 10 10.0 build 19044) CPU=amd64 (16
logical CPUs) (0x7eeec3000 RAM)
----------- Stack Backtrace -----------
解决方案
更新IBM Semeru JDK 8至最新稳定版
旧版本的Semeru JDK 8可能存在JVM层面的段错误bug,直接下载替换为最新发行版,覆盖现有安装目录后重新配置Eclipse项目的JRE。清理Eclipse缓存与项目构建文件
- 关闭Eclipse,备份工作区后删除
.metadata文件夹; - 打开项目,右键选择
Project Clean,清理并重新构建; - 删除项目根目录下的
bin、target等编译输出目录,重新编译运行。
- 关闭Eclipse,备份工作区后删除
统一Eclipse运行环境的JDK版本
避免Eclipse自身运行依赖JDK 11与项目用JDK 8的冲突:- 修改Eclipse安装目录下的
eclipse.ini,在-vmargs前添加JDK 8路径:-vm C:\path\to\ibm-semeru-jdk-8\bin\javaw.exe - 重启Eclipse后,确认
Window > Preferences > Java > Installed JREs中JDK 8为默认,且项目Build Path > Libraries引用该JDK。
- 修改Eclipse安装目录下的
关闭Eclipse自动构建与后台刷新
后台线程冲突可能引发段错误:- 取消勾选
Project > Build Automatically; - 在
Window > Preferences > General > Workspace中关闭Refresh using native hooks or polling; - 运行程序前手动执行项目构建。
- 取消勾选
排查系统环境变量与进程冲突
- 暂时移除系统环境变量中其他JDK的
JAVA_HOME、PATH配置,仅保留Semeru JDK 8路径; - 关闭不必要的后台Java相关进程后再运行程序。
- 暂时移除系统环境变量中其他JDK的
内容的提问来源于stack exchange,提问作者Jaya sakthivel

