当前位置: 首页 > news >正文

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.lryc.cn/news/215688.html

相关文章:

  • JavaScript中BOM与DOM
  • Nginx域名重定向(如何访问的域名和实际的数据请求路径不同,可解决前端跨域)
  • 2023年11月2日历史上的今天大事件早读
  • 红帽Redhat--Ansible实战1
  • 213. 打家劫舍 II
  • Spring 与 Spring Boot
  • Flutter 04 按钮Button和事件处理、弹框Dialog、Toast
  • thinkphp6多用用模式下缩短路由隐藏index应用名
  • AM@二阶常系数非齐次线性微分方程@待定系数法可解决的经典类型1
  • 大数据技术笔记
  • Vue 3 中的 Composition API
  • 《TCP/IP详解 卷一:协议》第5章的IPv4数据报的总长度字段出现“不需要大于576字节的IPv4数据报“相关内容的解释
  • PO-java客户端连接错误can not connect to server
  • PM2 vs Kubernetes:在部署 Node.js 服务时使用哪个?
  • 配置git并把本地项目连接github
  • pytorch笔记 GRUCELL
  • 不解压,也能列出文件信息
  • 微型计算机组成原理
  • 基站/手机是怎么知道信道情况的?
  • 进程/线程
  • Python 应用 之 转换音频格式
  • Oracle JDK 和OpenJDK两者有什么异同点
  • GPT引发智能AI时代潮流
  • FreeSWITCH mrcp-v2小记
  • 如何将你的PC电脑数据迁移到Mac电脑?使用“迁移助理”从 PC 传输到 Mac的具体操作教程
  • Elasticsearch集群搭建、数据分片以及位置坐标实现附近的人搜索
  • 深度学习_3 数据操作之线代,微分
  • 树莓派安装Ubuntu22.04LTS桌面版
  • Rust编程基础之函数和表达式
  • 关于preempt count的疑问