首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

美团一面:为什么线程崩溃崩溃不会导致 JVM 崩溃

大家好,我是坤哥 网上看到一个很有意思的美团面试题:为什么线程崩溃崩溃不会导致 JVM 崩溃,这个问题我看了不少回答,但发现都没答到根上,所以决定答一答,相信大家看完肯定会有收获,本文分以下几节来探讨...线程崩溃,进程一定会崩溃吗 进程是如何崩溃的-信号机制简介 为什么在 JVM 中线程崩溃不会导致 JVM 进程崩溃 openJDK 源码解析 线程崩溃,进程一定会崩溃吗 一般来说如果线程是因为非法访问内存引起的崩溃...,那么进程肯定会崩溃,为什么系统要让进程崩溃呢,这主要是因为在进程中,各个线程的地址空间是共享的,既然是共享,那么某个线程对地址的非法访问就会导致内存的不确定性,进而可能会影响到其他线程,这种操作是危险的...,所以统一会报 Segment Fault 错误(即段错误),这些都会导致进程崩溃 进程是如何崩溃的-信号机制简介 那么线程崩溃后,进程是如何崩溃的呢,这背后的机制到底是怎样的,答案是信号,大家想想要干掉一个正在运行的进程是不是经常用...(可以通过 -XX:ErrorFile=/var/log/hs_err.log 这样的方式指定),这个文件记录了虚拟机崩溃的重要原因,所以也可以说,虚拟机是否崩溃只要看它是否会产生此崩溃日志文件 总结

2.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    FlexboxLayoutManager崩溃

    记录一个FlexboxLayoutManager内部崩溃的排查过程 背景 崩溃发生在FlexboxLayoutManager内部 没有与项目代码直接关联的信息 在小米11上容易复现,其他机型没有复现...首先看下崩溃log Caused by: java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1 at java.util.ArrayList.get...,具体崩溃的代码,需要配合mapping文件来定位 根据mapping定位崩溃代码 项目采用R8混淆,mapping的代码会不太一样,先看下最终崩溃时候的log信息 ArrayIndexOutOfBoundsException...log,computeScrollOffset后面跟的行数信息是java:4,说明对应的是上面的mapping的第二行 2:5对应的行数是2291:2294,因为崩溃地方是4,所以对应的行数是2293,...:1220,所以崩溃的行数是1219,我们看下源码 可以知道是mFlexLines.get(lastFoundLinePosition)导致的崩溃 崩溃溯源 由于有机子可以稳定复现,重新复现后,定位下崩溃时候的信息

    1.9K30

    秩序与崩溃

    例如,在生物组织的所有尺度级别上观察到排列熵水平上升,从基因和单个细胞到组织、器官、生物体和社会群体[26]:单个细菌的死亡与多细胞生物的崩溃、生物体群体或整个生态系统的崩溃遵循相同的动力学[27]。...规范性目标状态的崩溃可能加剧自我与他人的二分法,这可能表现为群内与群外行为的增加(极化)。当压力持续存在时,外部(社会)和内部(自我)模型可能是下一个崩溃的目标。...当目标层次进一步崩溃时,系统组件之间的解耦可能变得如此严重,以至于整个系统崩溃。系统的内部状态将线性地跟随其环境的状态(即完全失去恒稳性),通常对应于疾病或系统的死亡。...随后的层次结构崩溃涉及从相对有序(同步,整合,适应性)状态过渡到相对无序(解同步,分隔,适应性不良)状态。生命系统中目标层次的自上而下崩溃似乎是过载自由能的开放耗散系统中级联故障的特例。...这可能可以解释为压力首先导致目标层次结构的最高区域崩溃,我们提出这包含一个贯穿(规范)层次结构,负责生成我们的“最高目标”。这样高层次结构的崩溃可能会产生层次结构下方的问题。

    15610

    程序崩溃与优化

    程序崩溃 程序崩溃是指计算机程序在运行时出现了严重的错误或异常情况,导致程序无法正常运行并突然终止。 1.1 程序崩溃出现场景 内存溢出: 在C程序中,内存分配通常由函数如malloc来完成。...如果程序未提供适当的异常处理机制,如使用try-catch块来捕获异常,程序可能会崩溃。在C中,除以零通常会导致程序终止,并且没有捕获异常的机制。...这将导致未定义行为,通常会导致程序崩溃。 #include #include int main() { // 5....内存溢出 int *arr = malloc(sizeof(int) * 100); arr[101] = 42; // 超出数组边界,可能导致崩溃 // 2....软件错误 int *ptr = NULL; *ptr = 42; // 试图访问空指针,可能导致崩溃 return 0; } 2.

    13910

    Windbg分析程序崩溃实践

    刚刚熟悉完产品的小木,接到了后台服务的报警,服务器后端偶尔会程序崩溃。刚开始小木还有点慌张,脑子里面浮现出各种问题,这个是程序的bug吗?茫茫的代码如何寻找问题?log能看到线索吗?...3.2 寻找程序崩溃的代码 加载完symbols后,我们来看下程序调用栈: 0:000> k # Child-SP RetAddr Call Site 00...RtlUserThreadStart+0x21 小木松了一口气,终于有点线索了,程序崩溃在函数LogStr,根据里面的行数提示,找到那段代码: void LogStr(std::string strContent...) { fprintf(stdout, strContent.c_str()); } 刚松了一口气,小木又疑惑起来,这个函数是用来打印博客标题的log的,一直都用,也测试过,怎么会偶尔导致程序崩溃

    1.2K30

    04.Android崩溃Crash库之Loop拦截崩溃和ANR

    目录总结 01.能否利用Looper拦截崩溃 02.思考几个问题分析 03.App启动时自动开启Looper 04.拦截主进程崩溃 前沿 上一篇整体介绍了crash崩溃崩溃重启,崩溃记录记录,查看以及分享日志等功能...拦截全局崩溃(主线程),避免 APP 退出。...,自行上报崩溃信息"); } }); } } ``` 通过上面的代码就可以就可以实现拦截UI线程的崩溃,耗时性能监控。...04.拦截主进程崩溃 拦截主进程崩溃其实也有一定的弊端,因为给用户的感觉是点击没有反应,因为崩溃已经被拦截了。...如果是Activity.create崩溃,会出现黑屏问题,所以如果Activity.create崩溃,必须杀死进程,让APP重启,避免出现改问题。

    1.1K20

    捕获崩溃异常并重启程序,上传崩溃日志到服务器

    App的上线测试不可能囊括所有的错误,以及一些极端的情况可能考虑不到, 所以给App设置崩溃日志反馈是很有必要的,很多第三方都有做到,例如说腾讯的Bugly,友盟的统计等等,都可以实现到,但是如果仅仅是需要向服务器反馈崩溃日志的话...系统的API中给我们提供了一个可以捕获App异常的方法: Thread.setDefaultUncaughtExceptionHandler(restartHandler); // 程序崩溃时触发线程...以下用来捕获程序崩溃异常 所以我们就可以使用以上方法来解决反馈崩溃日志的需求,以下是具体代码: /** * 创建服务用于捕获崩溃异常 */ private static...public void uncaughtException(Thread thread, Throwable ex) { restartApp(ex);//发生崩溃异常时

    94420

    iOS开发——解析崩溃日志

    在实际的开发过程中,作为开发者的我们常常会碰到一种场景,那就是真机调试时崩溃了,而有时又不能在Xcode中打印出崩溃信息,那么这时候我们就必须要获取到崩溃原因,从而解决问题。...而此时你可以选择导出自己的崩溃日志,并且这里的我们看到的崩溃日志,都是Xcode已经帮我们符号化的,很清晰的就可以看到崩溃原因,以及崩溃的位置。...如果是其他用户,下载了我们的App之后出现了崩溃,我们可以从iTunes Connect中获取到其他用户的崩溃日志,但是这时如果你去看他人的崩溃日志,不出意外您是懵逼的。这是崩溃日志么?...而如何把他人的崩溃日志符号化呢? 这就是我们接下来要讲的内容了。...依旧是万能的Xcode给我们提供了一个工具 —— symbolicatecrash,这是一个Xcode自带的分析工具,可以通过机器上的崩溃日志和应用的.dSYM文件定位发生崩溃的位置,把Crash日志中的一堆地址替换成代码相应的位置

    1.4K30

    MySQL 崩溃恢复过程分析

    崩溃直接就是戛然而止,撂挑子不干了,还没来得及进行的那些收尾工作怎么办? 那就只能等待下次启动的时候再干了,这就是本文要介绍的崩溃恢复过程。 2....读取两次写页面 MySQL 一旦崩溃,Redo 日志就要去拯救世界了(MySQL 就是它的世界),Redo 日志拯救世界的方式就是把还没来得及刷盘的脏页恢复到崩溃之前那一刻的状态。...正常状态指的是 MySQL 崩溃之前,数据页最后一次正确的刷新到磁盘的状态。...如果 MySQL 突然崩溃,来不及把这个标记设置为 0。...总结 MySQL 崩溃恢复过程的核心工作有 2 点: 对于 MySQL 崩溃之前还没有刷新到磁盘的数据页(也就是脏页),用 Redo 日志把这些数据页恢复到 MySQL 崩溃之前那一刻的状态,这相当于对脏页进行一次刷盘操作

    1.1K10
    领券