JVM堆溢出实例
2016-07-25 22:57
246 查看
堆溢出条件
要观察堆溢出,要同时满足两个条件:堆大小固定,不可扩展
不断创建对象,并保持对象不被回收
因为对象是在堆里面创建的,堆大小一定,一直创建对象就可以消耗完堆空间,同时,由于由于垃圾回收的存在,创建对象的时候也要保证对象不要被当做垃圾回收了,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章
相关文章推荐
- POJ2492 A Bug's Life 种群并查集
- 状压DP hunter
- nfs
- POJ 1703 Find them, Catch them 种群并查集
- sdut oj2122 数据结构实验之链表七:单链表中重复元素的删除
- PKU 1182 食物链 种群并查集
- LintCode:实现 Trie
- JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
- 设置GPnP profile文件中asm spfile的位置
- 提高项目44-为动态数组扩容
- Android Gradle BuildConfig的妙用
- 城堡中的美女(1)
- [网站上线]Lamp环境及其后续配置
- insertion sort
- 毕业文集-大学之路
- OC中自定义类的NSCopying实现的注意事项(isEqual & hash实现)
- 对iOS中MVC的理解
- 2016 Multi-University Training Contest 2 题解(待续)
- CodeForces 46D Parking Lot (线段树区间合并)
- 如何使用pt-duplicate-key-checker检查冗余索引