面试题:当你的JVM 堆内存溢出后,其他线程是否可继续工作?

news2024/11/23 8:41:14

最近网上出现一个美团面试题:“一个线程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”)等很多种情况。

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

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

代码如下:

public class JvmThread {
    public static void main(String[] args) {
        new Thread(() -> {
            List<byte[]> list = new ArrayList<byte[]>();
            while (true) {
                System.out.println(new Date().toString() + Thread.currentThread() + "==");
                byte[] b = new byte[1024 * 1024 * 1];
                list.add(b);
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
 
        // 线程二
        new Thread(() -> {
            while (true) {
                System.out.println(new Date().toString() + Thread.currentThread() + "==");
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

结果展示:

Wed Nov 07 14:42:18 CST 2018Thread[Thread-1,5,main]==
Wed Nov 07 14:42:18 CST 2018Thread[Thread-0,5,main]==
Wed Nov 07 14:42:19 CST 2018Thread[Thread-1,5,main]==
Wed Nov 07 14:42:19 CST 2018Thread[Thread-0,5,main]==
Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space
at com.gosaint.util.JvmThread.lambda$main$0(JvmThread.java:21)
at com.gosaint.util.JvmThread$$Lambda$1/521645586.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)
Wed Nov 07 14:42:20 CST 2018Thread[Thread-1,5,main]==
Wed Nov 07 14:42:21 CST 2018Thread[Thread-1,5,main]==
Wed Nov 07 14:42:22 CST 2018Thread[Thread-1,5,main]==

JVM启动参数设置:

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

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

总结:其实发生OOM的线程一般情况下会死亡,也就是会被终结掉,该线程持有的对象占用的heap都会被gc了,释放内存。因为发生OOM之前要进行gc,就算其他线程能够正常工作,也会因为频繁gc产生较大的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【黑马程序员】机器学习

&#xff08;一&#xff09;机器学习概述 一、机器学习算法分类 1、监督学习&#xff1a; &#xff08;1&#xff09;目标值是类别&#xff1a;分类问题 k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归 &#xff08;2&#xff09;目标值是连续型的数据&#xff1a;回归…

【吞噬星空】爽翻,徐欣喜提永恒之体,罗峰秒杀败类,阿特金磕头认错

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 吞噬星空动画第89集终于更新了&#xff0c;阿特金三大巨头的好日子到头了&#xff0c;从他们对徐欣出手的那一刻&#xff0c;就已经有取死之道。如今罗峰强势回归&#xff0c;上演复仇戏码&#xff0c;让大家看…

故障诊断实验台 | PT500mini轴承齿轮箱转子故障实验台

故障诊断实验台 | PT500mini轴承齿轮箱转子故障实验台 1 实验台简介2 实验台功能3 实验台技术清单4 价格 很多同学因为实验数据而被困扰&#xff0c;目前数据来源有3方面&#xff0c;公开实验数据集、校企合作项目实际数据、自制实验台数据。 公开实验数据集被用烂了&#xff0…

2023年中国铝压延产量、销售收入及市场规模分析[图]

铝压延加工业是将电解铝&#xff08;主要是铝锭&#xff09;通过熔铸、轧制或挤压、表面处理等多种工艺及流程生产出各种铝材的过程。铝材按照加工工艺的不同又可以分为铝轧制材和铝挤压材。 2018-2022年中国铝材产量累计值及增速 资料来源&#xff1a;共研产业咨询&#xff0…

PC网站支付宝扫码登录

1.电脑网站支付宝登录&#xff0c;拼接授权链接&#xff0c;在浏览器上访问授权链接即可登录 - 支付宝欢迎登录支付宝&#xff0c;支付宝-全球领先的独立第三方支付平台&#xff0c;致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验以及转账收款/水电煤…

winform 修改句柄数量

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows 1、GDIProcessHandleQuota 此项设置GDI句柄数量&#xff0c;默认值为2710(16进制)/10000(10进制)&#xff0c;该值的允许范围为 256 ~ 16384 &#xff0c;将其调整为大于默认的10000的值。如果…

2023年中国乳胶制品产量、需求量及市场规模分析[图]

乳胶泛指聚合物微粒分散于水中形成的胶体乳液&#xff0c;又称胶乳。习惯上将橡胶微粒的水分散体称为胶乳&#xff0c;而将树脂微粒的水分散体称为乳液。以乳胶为原料制成的制品称乳胶制品&#xff0c;常见的如海绵、手套、玩具、胶管等。 我国乳胶制品细分主要分为避孕套、乳胶…

使用magic-api构建迅速开发平台的成功案例分享

通过一个简单的demo让您了解magic-api的强大功能。在开始之前&#xff0c;请确保您已经满足以下条件&#xff1a; 拥有Java开发环境及相关IDE。 拥有Mysql环境。 对Spring Boot有一定的了解。 对Maven有基本的了解。 只需要几个简单的步骤&#xff0c;您就可以开始使用mag…

易点易动引入RFID标签自动精准盘点,让固定资产盘点更高效

随着企业规模的扩大和固定资产数量的增加&#xff0c;固定资产的盘点工作变得越来越繁琐&#xff0c;传统的手工盘点方式不仅效率低下&#xff0c;还容易出现错误。为了解决这一问题&#xff0c;我们推出了易点易动固定资产管理系统&#xff0c;该系统引入了RFID&#xff08;射…

如何打造智慧公厕管理系统,提升公共厕所智能化服务质量?

在城市的角角落落&#xff0c;公共厕所是人们生活中不可或缺的基础设施之一。然而&#xff0c;过去公共厕所由于采用粗放式的管理&#xff0c;只关注清洁卫生&#xff0c;而在管理上会存在着一系列问题&#xff0c;如卫生状况不佳、维护不到位、管理不科学等。为了改善这一现状…

github: kex_exchange_identification: Connection closed by remote host

问题描述 (base) ➜ test git:(dev) git pull kex_exchange_identification: Connection closed by remote host Connection closed by 192.30.255.113 port 22 致命错误&#xff1a;无法读取远程仓库。解决方案 参照下边文档 https://docs.github.com/en/authentication/tr…

面试58同城!面试官问我redis 雪崩、穿透、击穿怎么处理?

一、Redis 缓存雪崩 1.1 缓存雪崩的概念 缓存雪崩指的是在某个时间点&#xff0c;缓存中的大量数据同时失效&#xff0c;导致大量请求直接落到数据库上&#xff0c;造成数据库压力过大&#xff0c;甚至引发系统崩溃。 1.2 缓存雪崩发生的原因 缓存雪崩通常是由以下原因引起…

在微信公众号怎么做扫码抽奖活动

微信扫码抽奖是一种流行的互动营销方式&#xff0c;它通过扫描二维码或使用微信内置的扫描功能来参与抽奖活动。这种活动方式不仅简单易用&#xff0c;而且可以吸引大量用户参与&#xff0c;提高品牌知名度。本文将介绍微信扫码抽奖的步骤、优势、案例以及如何策划一次成功的微…

百度发布全新 AI 互动式搜索:百度简单搜索

本心、输入输出、结果 文章目录 百度发布全新 AI 互动式搜索&#xff1a;百度简单搜索前言主要能力 相关资料能力介绍 百度搜索升级发文告用户如何获取百度简单搜索百度简单搜索的定位百度简单搜索在 APP 上面的体验讨论和点评我们关注的几个问题 弘扬爱国精神 百度发布全新 AI…

JDBC-day05(DAO及相关实现类)

七&#xff1a;DAO及相关实现类 1. DAO介绍 DAO&#xff1a;Data Access Object访问数据信息的类和接口&#xff0c;包括了对数据的CRUD&#xff08;Create、Retrival、Update、Delete&#xff09;&#xff0c;而不包含任何业务相关的信息。有时也称作&#xff1a;BaseDAO作用…

【Java实战】Mysql读写分离主从复制搭建保姆级教程

MySQL 的数据同步通常采用主从复制&#xff08;Master-Slave&#xff09;的方式。 主从复制基于二进制日志&#xff08;binlog&#xff09;。主服务器&#xff08;Master&#xff09;在 binlog 中记录数据更改&#xff0c;从服务器&#xff08;Slave&#xff09;将这些日志读取…

坚持每日分享5款好用的小软件

今天推荐5款十分小众的软件&#xff0c;知道的人不多&#xff0c;但是每个都是非常非常好用的&#xff0c;有兴趣的小伙伴可以自行搜索下载。 1.素材管理——Billfish ​ Billfish是一款免费的素材管理软件&#xff0c;可以帮助设计师、摄影师、视频制作人等管理本地的图片、…

CSS3 就可以写出一个苹果官方渐变颜色文字效果,真的太逼真了!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

使用Cpolar和Tipas在Ubuntu上搭建私人问答网站,构建专业问答系统

文章目录 前言2.Tipask网站搭建2.1 Tipask网站下载和安装2.2 Tipask网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 4. 公网访问测试5. 结语 前…

01、RocketMQ--安装windows版本

目录 安装windows版本&#xff1a;启动&#xff1a;启动mq&#xff1a;启动broker&#xff1a;启动管控台&#xff1a; 启动jar包启动linux的RocketMQ服务 安装windows版本&#xff1a; 1、使用rocketmq解压到指定的目录 2、需要配置环境变量 ROCKETMQ_HOME 3、修改broker的…