深入理解java虚拟机之2.4 OutOfMemoryError异常代码
##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异常代码相关推荐
- java outofmemory_深入理解JAVA虚拟机学习笔记3——OutOfMemoryError异常
开门见山. 为了方便制造溢出,将JAVA堆的大小调整为10M. 本机用的是IntelliJ IDEA作为开发工具,进入到IDEA的安装目录,如D:\tools\IntelliJ IDEA 2017.1 ...
- 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析
来自:好好学java 话不多说,今天就分析一下一些常用的Java虚拟机的参数设置,以及如何更好的使用! 1 JVM参数简介 首先想说的是其实这些参数我们并不是陌生的,在平时的开发和使用中经常都会遇到, ...
- 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析
来自:好好学java 这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这些知识之后,才能更好的进行Jvm调优或者更加深入的学习,本来这些知识是晦涩难懂的,所以希望能够 ...
- 怎么把虚拟机清空内存_深入理解java虚拟机1——内存管理机制与回收机制
文中涉及JVM底层知识大多来自<深入理解Java虚拟机>第2版,内容枯燥乏味,如果看,认真看.跟着撸一遍也可以受益良多. 1.JVM:是运行在操作系统之上的,它与硬件没有直接的交互. 运行 ...
- 《深入理解java虚拟机》笔记2——GC算法与内存分配策略
说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...
- 《深入理解java虚拟机》笔记1——Java内存区域与Java对象
运行时数据区域 JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程 ...
- 深入理解Java虚拟机-常用vm参数分析
Java虚拟机深入理解系列全部文章更新中- 深入理解Java虚拟机-Java内存区域透彻分析 深入理解Java虚拟机-常用vm参数分析 深入理解Java虚拟机-JVM内存分配与回收策略原理,从此告别J ...
- 深入理解Java虚拟机-Java内存区域透彻分析
Java虚拟机深入理解系列全部文章更新中- 深入理解Java虚拟机-Java内存区域透彻分析 深入理解Java虚拟机-常用vm参数分析 深入理解Java虚拟机-JVM内存分配与回收策略原理,从此告别J ...
- java 内存溢出的分类_【深入理解Java虚拟机】读后感:JVM内存划分与内存溢出小结...
扫码关注公众号:Java 技术驿站 发送:vip 将链接复制到本浏览器,永久解锁本站全部文章 [公众号:Java 技术驿站] [加作者微信交流技术,拉技术群] # JVM内存划分与内存溢出小结 # 1 ...
最新文章
- [JavaScript] JavaScript 值类型使用:与数组有关的API
- 用Java中的HashSet写一个学生管理系统(添加、删除、修改、查询学生信息)
- java返回json ajax_Spring MVC 中 AJAX请求并返回JSON的示例
- android不公开的面试题偶!!!
- nohub 将程序永久运行下去
- python查询在查询_python 查询,子查询以及1对多查询
- 电脑维修:电脑维修必备工具整理
- c# 命名空间命名规范_C#命名空间能力问题和解答 套装3
- cuda笔记-流的使用(定义、创建、消耗、同步)
- [APIO2013]机器人[搜索、斯坦纳树]
- pagePiling.js - 创建美丽的全屏滚动效果
- 【浙大第19届校赛:A】Thanks, TuSimple!(模拟+简单匹配)
- 2017微信小程序全套源代码 最新 最全 好用
- 了解计算机PS,PS教程:你应该了解的PS基础绘图工具
- 软件测试之软件测试方法
- 佳博打印机打印条码和二维码的方法
- 计算机硬盘检测不到,硬盘检测不到怎么解决
- Windows防火墙 命令行批量阻断攻击IP(非范围)
- 转型OMO的背后:考虑机构的资金和实力-线上线下融合式教学
- Threejs 中的后期处理
热门文章
- 如何设置计算机远程登录安全级别,win7系统远程桌面安全设置的操作方法
- [多核并行计算]进程间通信(三)套接字
- JasperException异常
- plink源码_Plink v0.1.0 发布——基于Flink的流处理平台
- java类到proto定义转换工具
- 怎样当好一名优秀的班组长?
- centos 安装 oh-my-zsh 加 zsh-syntax-highlighting 高亮
- modbus 协议中,操作数01(读线圈状态)对应的地址是怎么定义的?是位地址还是寄存器地址?
- 失眠不仅仅是睡不着,出现这些情况也算失眠
- 判断今天是不是本月最后一天