##1. 堆内存溢出

package chapter2;import java.util.ArrayList;
import java.util.List;/*** @ClassName HeapOOM* @Description 验证java堆OOM  参数 -Xms 20m -Xmx 20m -XX:+HeapDumpOnOutOfMemoryError* @Author 86134* @Date 2022/9/9 14:19* @Version 1.0**/public class HeapOOM {static class OOMObject{}public static void main(String[] args) {List<OOMObject> list=new ArrayList<OOMObject>();while (true){list.add(new OOMObject());}}
}//输出
/*Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:3210)at java.util.Arrays.copyOf(Arrays.java:3181)at java.util.ArrayList.grow(ArrayList.java:265)at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)at java.util.ArrayList.add(ArrayList.java:462)at chapter2.HeapOOM.main(HeapOOM.java:21)*/

2. 运行时方法栈

hotpot虚拟机运行时方法栈的异常分为两种:
(1)当栈的深度能动态扩展时,当前线程的栈帧请求的深度在栈拓展后任然无法满足,报OOM异常
(2) 当不能拓展时,包StackOverflowError异常

1. 栈帧大小已定,栈深度太小,栈帧太多

package chapter2;import javax.sound.midi.Soundbank;/*** @ClassName JavaVMStackSOF* @Description 本地方法栈太小时的异常  -Xss 128k* @Author 86134* @Date 2022/9/9 14:41* @Version 1.0**/public class JavaVMStackSOF {private int stackLength=1;public void stackLeak(){stackLength++;stackLeak();}public static void main(String[] args) {JavaVMStackSOF javaVMStackSOF = new JavaVMStackSOF();try{javaVMStackSOF.stackLeak();}catch (Exception e){System.out.println("运行时方法栈的深度"+javaVMStackSOF.stackLength);throw e;}}//输出/*运行时方法栈的深度20703Exception in thread "main" java.lang.StackOverflowError*/
}

2. 栈帧太大时 略

3. 字符串常量池的溢出

jdk7以后,字符串常量池放在堆空间内,所以本质上是堆空间的溢出.

public class RunTimeConstantPoolOOM {public static void main(String[] args) {HashSet<String> set = new HashSet<>();short i=1;while(true){set.add(String.valueOf(i++));}}//输出/** Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceededat java.lang.Integer.toString(Integer.java:403)at java.lang.String.valueOf(String.java:3099)at chapter2.RunTimeConstantPoolOOM.main(RunTimeConstantPoolOOM.java:20)*/
}

深入理解java虚拟机之2.4 OutOfMemoryError异常代码相关推荐

  1. java outofmemory_深入理解JAVA虚拟机学习笔记3——OutOfMemoryError异常

    开门见山. 为了方便制造溢出,将JAVA堆的大小调整为10M. 本机用的是IntelliJ IDEA作为开发工具,进入到IDEA的安装目录,如D:\tools\IntelliJ IDEA 2017.1 ...

  2. 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析

    来自:好好学java 话不多说,今天就分析一下一些常用的Java虚拟机的参数设置,以及如何更好的使用! 1 JVM参数简介 首先想说的是其实这些参数我们并不是陌生的,在平时的开发和使用中经常都会遇到, ...

  3. 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析

    来自:好好学java 这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这些知识之后,才能更好的进行Jvm调优或者更加深入的学习,本来这些知识是晦涩难懂的,所以希望能够 ...

  4. 怎么把虚拟机清空内存_深入理解java虚拟机1——内存管理机制与回收机制

    文中涉及JVM底层知识大多来自<深入理解Java虚拟机>第2版,内容枯燥乏味,如果看,认真看.跟着撸一遍也可以受益良多. 1.JVM:是运行在操作系统之上的,它与硬件没有直接的交互. 运行 ...

  5. 《深入理解java虚拟机》笔记2——GC算法与内存分配策略

    说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...

  6. 《深入理解java虚拟机》笔记1——Java内存区域与Java对象

    运行时数据区域 JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程 ...

  7. 深入理解Java虚拟机-常用vm参数分析

    Java虚拟机深入理解系列全部文章更新中- 深入理解Java虚拟机-Java内存区域透彻分析 深入理解Java虚拟机-常用vm参数分析 深入理解Java虚拟机-JVM内存分配与回收策略原理,从此告别J ...

  8. 深入理解Java虚拟机-Java内存区域透彻分析

    Java虚拟机深入理解系列全部文章更新中- 深入理解Java虚拟机-Java内存区域透彻分析 深入理解Java虚拟机-常用vm参数分析 深入理解Java虚拟机-JVM内存分配与回收策略原理,从此告别J ...

  9. java 内存溢出的分类_【深入理解Java虚拟机】读后感:JVM内存划分与内存溢出小结...

    扫码关注公众号:Java 技术驿站 发送:vip 将链接复制到本浏览器,永久解锁本站全部文章 [公众号:Java 技术驿站] [加作者微信交流技术,拉技术群] # JVM内存划分与内存溢出小结 # 1 ...

最新文章

  1. [JavaScript] JavaScript 值类型使用:与数组有关的API
  2. 用Java中的HashSet写一个学生管理系统(添加、删除、修改、查询学生信息)
  3. java返回json ajax_Spring MVC 中 AJAX请求并返回JSON的示例
  4. android不公开的面试题偶!!!
  5. nohub 将程序永久运行下去
  6. python查询在查询_python 查询,子查询以及1对多查询
  7. 电脑维修:电脑维修必备工具整理
  8. c# 命名空间命名规范_C#命名空间能力问题和解答 套装3
  9. cuda笔记-流的使用(定义、创建、消耗、同步)
  10. [APIO2013]机器人[搜索、斯坦纳树]
  11. pagePiling.js - 创建美丽的全屏滚动效果
  12. 【浙大第19届校赛:A】Thanks, TuSimple!(模拟+简单匹配)
  13. 2017微信小程序全套源代码 最新 最全 好用
  14. 了解计算机PS,PS教程:你应该了解的PS基础绘图工具
  15. 软件测试之软件测试方法
  16. 佳博打印机打印条码和二维码的方法
  17. 计算机硬盘检测不到,硬盘检测不到怎么解决
  18. Windows防火墙 命令行批量阻断攻击IP(非范围)
  19. 转型OMO的背后:考虑机构的资金和实力-线上线下融合式教学
  20. Threejs 中的后期处理

热门文章

  1. 如何设置计算机远程登录安全级别,win7系统远程桌面安全设置的操作方法
  2. [多核并行计算]进程间通信(三)套接字
  3. JasperException异常
  4. plink源码_Plink v0.1.0 发布——基于Flink的流处理平台
  5. java类到proto定义转换工具
  6. 怎样当好一名优秀的班组长?
  7. centos 安装 oh-my-zsh 加 zsh-syntax-highlighting 高亮
  8. modbus 协议中,操作数01(读线圈状态)对应的地址是怎么定义的?是位地址还是寄存器地址?
  9. 失眠不仅仅是睡不着,出现这些情况也算失眠
  10. 判断今天是不是本月最后一天