java bufferedreader读大文件会内存溢出吗_美团面试真题:jvm堆内存溢出后,其他线程是否可继续工作?...

本文探讨了一个线程触发堆溢出(OutOfMemoryError: Java heap space)后的后果,指出在这种情况下,其他线程仍能继续运行。通过JVM内存监控,展示了当一个线程抛出OOM异常后,其占用的内存会被释放,不影响其他线程的执行。此外,文章还提及了栈溢出的情况,结论相同。并列举了一系列Java JVM性能优化相关的面试题,涉及内存分配、垃圾回收机制等内容。
摘要由CSDN通过智能技术生成
f2d99b0a604cc6c81038974c036bac2f.png

最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”

我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。

由于题目中给出的OOM,java中OOM又分很多类型;比如:堆溢出(“java.lang.OutOfMemoryError: Java heap space”)、永久带溢出(“java.lang.OutOfMemoryError:Permgen space”)、不能创建线程(“java.lang.OutOfMemoryError:Unable to create new native thread”)等很多种情况。

本文主要是分析堆溢出对应用带来的影响。

先说一下答案,答案是还能运行

代码如下:

a1c51c16a71c2b08ee162d9a8b20673d.png

结果展示:

b0f6c425d78066f78c9edef153758f26.png

JVM启动参数设置:

e183542f8f5f958b289529851275530b.png

上图是JVM堆空间的变化。我们仔细观察一下在14:42:05~14:42:25之间曲线变化,你会发现使用堆的数量,突然间急剧下滑!这代表这一点,当一个线程抛出OOM异常后,它所占据的内存资源会全部被释放掉,从而不会影响其他线程的运行!

讲到这里大家应该懂了,此题的答案为一个线程溢出后,进程里的其他线程还能照常运行。注意了,这个例子我只演示了堆溢出的情况。如果是栈溢出,结论也是一样的,大家可自行通过代码测试。

2019年jvm性能优化相关的大厂面试真题:

Java类加载过程java内存分配描述一下jvm加载class文件的原理机制GC是什么?为什么要有GC?简述java垃圾回收机制如何判断一个对象是否存活?(或者GC对象的判定方法)垃圾回收的优点和原理。并考虑2种回收机制。垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?java中会存在内存泄漏吗,请简单描述。深拷贝和浅拷贝syatem,gc ()和runtime,gc ()会做做什么事情?finalize方法什么时候被调用?析构函数(finalizatinon)的目的是什么?如何对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?什么是分布式垃圾回收(DGC)?它是如何工作的?串行(serial)收集器和吞吐量(throughout)收集器的区别是什么?在Java中,对象什么时候可以被垃圾回收?简述Java内存分配与回收策率以及minor GC和majorGC。jvm的永久代中会发生垃圾回收吗?Java中垃圾收集的方法有哪些?什么是类加载器,类加载器有哪些?
jvm性能优化一直是大厂面试考察的一个重点,上面给大家展示的是一部分jvm性能优化的面试整体,由于文章的长度限制,没有将所有的答案都给大家分享出来,除了性能优化,小编还整理了有微服务,开源框架,并发编程,分布式专题,有需要的朋友可以关注小编+转发文章+私信【面试真题】获取。
da3b545ee656318ed0a0200506b20ed8.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值