最近安卓同事在打包APK时出现,远程主机强迫关闭了一个现有的连接,报错后立即生成一个hs_err_pid14372.log,文件头如下:
A fatal error hasbeen detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION(0xc0000005) at pc=0x00000000e6ec5d78, pid=14372, tid=3020
JRE version:Java(TM) SE Runtime Environment (8.0_31-b13) (build 1.8.0_31-b13)
Java VM: JavaHotSpot(TM) 64-Bit Server VM (25.31-b07 mixed mode windows-amd64 compressedoops)
Problematic frame:
C 0x00000000e6ec5d78
Failed to writecore dump. Minidumps are not enabled by default on client versions of Windows
If you would liketo submit a bug report, please visit:
http://bugreport.java.com/bugreport/crash.jsp
--------------- T H R E A D ---------------
Currentthread (0x000000001d5b3800): JavaThread"ForkJoinPool.commonPool-worker-2" daemon [_thread_in_Java, id=3020,stack(0x0000000023750000,0x0000000023850000)]
根据关键信息:
EXCEPTION_ACCESS_VIOLATION和Problematic frame,这类错误一般是JVM的BUG或者JVM调用的本地代码问题。
Problematic frame下面一行有一个关键字 C,C代表Native C frame。
线程信息部分为当前线程信息,有一个关键字:_thread_in_Java,_thread_in_Java在官方文档解释为:线程被终端或者正在编译Java代码,与APK处于打包编译阶段相符。
经过确认,Android App使用的三方库在其他APP上不存在问题,排除调用第三方库问题,那么应该是JVM BUG。
在hs_err日志文件头部还有一个关键信息:JRE version:Java(TM) SE Runtime Environment (8.0_31-b13) (build 1.8.0_31-b13),使用的JDK版本你是8.0_31-b13。看来就是JVM BUG。
让Android同事将JDK更换为jdk-8u201-windows-x64解决问题。