Java 谈谈你对OOM的认识

文章目录

  • 前言
  • 一、基础架构
  • 二、常见OOM
    • 1、栈内存溢出java.lang.StackOverflowError
    • 2、堆内存溢出java.lang.OutOfMemoryError:Java heap space
    • 3、GC回收时间过长java.lang.OutOfMemoryError: GC overhead limit exceeded
    • 4、NIO程序堆外内存溢出java.lang.OutOfMemoryError: Direct buffer memory
    • 5、(重要)不能创建本地线程java.lang.OutOfMemoryError: unable to create native thread
    • 6、元空间溢出java.lang.OutOfMemoryError: Metaspace


前言

对OOM部分的认识,予以记录!

一、基础架构

Error与Exception
在这里插入图片描述

二、常见OOM

在这里插入图片描述

1、栈内存溢出java.lang.StackOverflowError

方法的递归调用

public class StackOverFlowErrorDemo {public static void main(String[] args) {stackOverFlowError();}private static void stackOverFlowError() {stackOverFlowError();}
}

Exception in thread "main" java.lang.StackOverflowError

2、堆内存溢出java.lang.OutOfMemoryError:Java heap space

new大对象

public class HeapSpaceDemo {public static void main(String[] args) {byte[] bytes = new byte[30 * 1024 * 1024];}
}

在这里插入图片描述
在这里插入图片描述

3、GC回收时间过长java.lang.OutOfMemoryError: GC overhead limit exceeded

超过98%的时间做GC而回收了不到2%的堆内存

public class GCOverheadDemo {public static void main(String[] args) {int i = 0;List<String> list = new ArrayList<>();try {while (true) {list.add(String.valueOf(++i).intern());}} catch (Throwable e) {System.out.println("=================" + i);e.printStackTrace();throw e;}}
}

在这里插入图片描述

在这里插入图片描述

4、NIO程序堆外内存溢出java.lang.OutOfMemoryError: Direct buffer memory

netty nio
在这里插入图片描述

public class DirectBufferMemoryDemo {public static void main(String[] args) {System.out.println("配置的maxDirectoryMemory:" + (sun.misc.VM.maxDirectMemory() / (double)1024 / 1024) + "MB");ByteBuffer byteBuffer = ByteBuffer.allocateDirect(6 * 1024 * 1024);}
}

在这里插入图片描述

5、(重要)不能创建本地线程java.lang.OutOfMemoryError: unable to create native thread

在这里插入图片描述

package com.kqli.oom;public class UnableCreateNewThreadDemo {public static void main(String[] args) {for (int i = 0; ; i++) {System.out.println("=========" + i);new Thread(() -> {try {Thread.sleep(Integer.MAX_VALUE);} catch (InterruptedException e) {throw new RuntimeException(e);}}, "Thread-" + i).start();}}
}

将java文件复制到ubuntu中,执行以下命令:

javac -d . UnableCreateNewThreadDemo.javajava com.kqli.oom.UnableCreateNewThreadDemo

在这里插入图片描述

6、元空间溢出java.lang.OutOfMemoryError: Metaspace

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang 发起 http 请求,获取访问域名的 ip 地址(net, httptrace)

前言 今天碰到了个需求&#xff0c;我要知道程序对外访问的 http 请求域名的 ip 地址。 直接查看 golang 的 net/http 包&#xff0c;发现 Response 中并没有我想要的 ip 信息。 考虑到在 OSI 七层模型中&#xff0c;ip 是网络层协议&#xff0c;而 http 是应用层协议。去翻…

【Qt之事件过滤器】使用

介绍 事件过滤器是Qt中一种重要的机制&#xff0c;用于拦截并处理窗口和其他对象的事件。 它可以在不修改已有代码的情况下&#xff0c;动态地增加、删除一些处理事件的代码&#xff0c;并能够对特定对象的事件进行拦截和处理。 在Qt中&#xff0c;事件处理经过以下几个阶段&…

3D医学三维技术影像PACS系统源码

一、系统概述 3D医学影像PACS系统&#xff0c;它集影像存储服务器、影像诊断工作站及RIS报告系统于一身,主要有图像处理模块、影像数据管理模块、RIS报告模块、光盘存档模块、DICOM通讯模块、胶片打印输出等模块组成&#xff0c; 具有完善的影像数据库管理功能&#xff0c;强大…

SpringBoot框架使用AOP + 自定义注解实现请求日志记录

一、SpringBoot记录日志 文章目录 一、SpringBoot记录日志1.1、环境搭建1.2、配置FastJson1.3、自定义LogRecord注解1.4、定义日志实体类1.5、创建HttpRequestUtil工具类1.6、定义AOP切面1.7、编写测试类1.8、运行测试 1.1、环境搭建 搭建SpringBoot工程。引入【spring-boot-st…

基于动力学模型的机械臂滑膜控制

一、滑模控制设计思路 参考资料&#xff1a;https://zhuanlan.zhihu.com/p/463230163&#xff08;思路理解&#xff09; https://blog.csdn.net/xiaohejiaoyiya/article/details/90271529&#xff08;干扰的处理&#xff09; 滑模控制的思路有两个关键&#xff0c;一个是设计…

【广州华锐互动】风景区规划VR虚拟现实教学系统

风景区规划VR虚拟现实教学系统是一种新兴的教学工具&#xff0c;它可以通过虚拟现实技术&#xff0c;为学生提供一种沉浸式的、实时的、全方位的景区规划体验。 在风景区规划VR虚拟现实教学系统中&#xff0c;学生可以通过虚拟现实技术&#xff0c;实时地与景区进行交互。他们可…

深度学习之基于Tensorflow人脸面部表情识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Tensorflow的人脸面部表情识别系统是一种基于深度学习技术的图像处理应用&#xff0c;该系统主要通过人脸图像数…

[SSD综述1.6] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?

依公知及经验整理,原创保护,禁止转载。 专栏 《SSD入门到精通系列》 <<<< 返回总目录 <<<< ​ 传统的 HDD 是“马达+磁头+磁盘”的机械结构,而 SSD 则是“闪存介质+主控”的纯半导体芯片存储结构,两者在数据存储介质和读写方式上有着本质区别,这…

【每日一题】移除链表元素(C语言)

移除链表元素&#xff0c;链接奉上 目录 思路&#xff1a;代码实现&#xff1a;链表题目小技巧&#xff1a; 思路&#xff1a; 在正常情况&#xff1a; 下我们移除链表元素时&#xff0c;需要该位置的前结点与后节点&#xff0c; 在特别情况时&#xff1a; 例如 我们发现&…

「Qt中文教程指南」如何创建基于Qt Widget的应用程序(四)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文描述了如何使用…

C#使用Oracle.ManagedDataAccess.dll

1、添加引用 在网上下载一个Oracle.ManagedDataAccess.dll&#xff0c;引用即可&#xff0c;操作不受操作系统的位数限制&#xff0c;服务器也不Oracle客户端&#xff1b; 2、web.config字串 <appSettings> <add key"hrp" value"Data Source (DES…

Iceberg 基础知识与基础使用

1 Iceber简介 1.1 概述 为了解决数据存储和计算引擎之间的适配的问题&#xff0c;Netflix开发了Iceberg&#xff0c;2018年11月16日进入Apache孵化器&#xff0c;2020 年5月19日从孵化器毕业&#xff0c;成为Apache的顶级项目。 Iceberg是一个面向海量数据分析场景的开放表格…