一个Java crash问题解决

简介: Java Crash

最近安卓同事在打包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解决问题。

目录
相关文章
|
3天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
22 0
|
1天前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
1天前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
2天前
|
缓存 Java
【Java基础】简说多线程(上)
【Java基础】简说多线程(上)
6 0
|
2天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
3天前
|
安全 Java 编译器
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
16 0
|
3天前
|
监控 安全 Java
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
10 2
|
3天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
29 1
|
3天前
|
安全 Java
Java基础教程(15)-多线程基础
【4月更文挑战第15天】Java内置多线程支持,通过Thread类或Runnable接口实现。线程状态包括New、Runnable、Blocked、Waiting、Timed Waiting和Terminated。启动线程调用start(),中断线程用interrupt(),同步用synchronized关键字。线程安全包如java.util.concurrent提供并发集合和原子操作。线程池如ExecutorService简化任务管理,Callable接口允许返回值,Future配合获取异步结果。Java 8引入CompletableFuture支持回调。
|
3天前
|
Java
Java中的并发编程:理解和应用线程池
【4月更文挑战第23天】在现代的Java应用程序中,性能和资源的有效利用已经成为了一个重要的考量因素。并发编程是提高应用程序性能的关键手段之一,而线程池则是实现高效并发的重要工具。本文将深入探讨Java中的线程池,包括其基本原理、优势、以及如何在实际开发中有效地使用线程池。我们将通过实例和代码片段,帮助读者理解线程池的概念,并学习如何在Java应用中合理地使用线程池。