JVM堆溢出实例
来源:互联网 发布:岩泉一数据 编辑:程序博客网 时间:2024/05/16 01:50
堆溢出条件
要观察堆溢出,要同时满足两个条件:
- 堆大小固定,不可扩展
- 不断创建对象,并保持对象不被回收
因为对象是在堆里面创建的,堆大小一定,一直创建对象就可以消耗完堆空间,同时,由于由于垃圾回收的存在,创建对象的时候也要保证对象不要被当做垃圾回收了,JVM使用可达性分析来判断一个对象是否是垃圾。我们可以使用jvm参数来限制堆大小,可以将对象加入到List中,保持对象存活。
堆溢出代码
package test.jvm;import java.util.ArrayList;import java.util.List;/**java堆溢出实例 * 原理:java的堆是用来存放对象实例的,所以我们只要做到以下三点就可以使堆溢出: * 1、限制堆的大小,不可扩展 * 2、不断新建对象 * 3、保持对象存活不被回收 * 对应的,我们需要: * 1、改变JVM的启动参数,将堆的最小值和最大值设成一样,这样就可以避免堆自动扩展(其实不一样也可以) * 2、不断产生对象 * 3、使用一个List来保存对象,保持对象存活 * * JVM配置参数: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError * @author luchu * */public class JVMLearnning01 { static class OOMObject{ } public static void main(String[] args){ JVMLearnning01 hello = new JVMLearnning01(); List<OOMObject> list = new ArrayList<>(); while(true){ list.add(new OOMObject()); } }}
上面的代码要产生堆溢出,要先配置jvm启动参数,run as –> run configration 里可以配置。
上面几个人参数的意思是:
-Xms20m -Xmx20m : 堆的最大最小值都是20m,避免自动扩展。
XX:+HeapDumpOnOutOfMemoryError :让虚拟机在出现堆溢出时dump当前内存堆转储快照,以便进行分析。分析可以使用Eclipse Memory analyzer进行。
学习《深入浅出Java虚拟机》 周志明版 2.4章
0 0
- JVM堆溢出实例
- jvm内存溢出实例一
- jvm内存管理之java堆溢出
- 持久区jvm堆内存溢出原因
- java代码实现JVM栈溢出,堆溢出
- 分析Jvm的heap溢出的实例
- Linux 堆溢出之fastbin实例
- 一个关于jvm堆溢出引发的思考
- JVM进阶(四)——利用MAT排查堆溢出
- JVM进阶(四)——利用MAT排查堆溢出
- 【JVM】1_测试堆内存溢出异常
- Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)
- Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread),
- Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)
- Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)
- 【JVM类加载】以及占内存溢出StackOverflowError、堆内存溢出OutOfMemoryError
- 堆溢出
- 堆溢出,栈溢出
- RecycleView的使用
- Linux sed命令详解
- 属性动画ValueAnimator在自定义View中的使用 属性动画核心类
- 状压DP hunter
- POJ2492 A Bug's Life 种群并查集
- JVM堆溢出实例
- poj 1996 The Highest Profits(数学多项式)
- Java Se----数组
- JVM简介
- Android Toolbar设置向上箭头,标题等
- sdut oj2054 数据结构实验之链表九:双向链表
- Android 一些异常
- 转:Bootstrap的常用类(CSS和布局组件)的总结
- POJ 2739 Sum of Consecutive Prime Numbers