java堆溢出的小栗子
package com.xiaoysec.test; import java.util.ArrayList;
import java.util.List; /**
*VM Args:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8
* @author xiaoysec
*
*/
public class HeapOOM {
static class OOMObject{
//定义一个静态内部类
}
public static void main(String[] args){
List<OOMObject> list = new ArrayList<HeapOOM.OOMObject>();
//int i=0;
while(true){
list.add(new OOMObject());
//System.out.println(i);
//i++;
}
}
}
代码是相当简单的,就是一个HeapOOM类进行HeapOutofMemory测试,在该类里面有一个静态内部类OOMObject
主要的思想就是在main方法里面用一个死循环不停地创建对象我们知道java对象是在java堆里面的当堆内存不足的时候虚拟机会进行垃圾回收,但是当虚拟机发现这些对象还是有用的不能被回收时,就扩展堆空间,但在本例当中有一个while(true)也就是说即使扩展了空间也是没用的!
值得一提的是我们需要在VM arguments中设置 -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8也就是把堆的最大最小值设置为相同的20M以避免堆进行自动扩展
下面就是运行结果:
[GC (Allocation Failure) [PSYoungGen: 7882K->1000K(9216K)] 7882K->5433K(19456K), 0.0100414 secs] [Times: user=0.05 sys=0.00, real=0.01 secs]
[GC (Allocation Failure) --[PSYoungGen: 9192K->9192K(9216K)] 13625K->19424K(19456K), 0.0155543 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
[Full GC (Ergonomics) [PSYoungGen: 9192K->0K(9216K)] [ParOldGen: 10232K->10051K(10240K)] 19424K->10051K(19456K), [Metaspace: 2756K->2756K(1056768K)], 0.2144901 secs] [Times: user=0.36 sys=0.00, real=0.21 secs]
[Full GC (Ergonomics) [PSYoungGen: 7635K->8076K(9216K)] [ParOldGen: 10051K->7940K(10240K)] 17687K->16017K(19456K), [Metaspace: 2756K->2756K(1056768K)], 0.1848934 secs] [Times: user=0.37 sys=0.00, real=0.18 secs]
[Full GC (Allocation Failure) [PSYoungGen: 8076K->8076K(9216K)] [ParOldGen: 7940K->7940K(10240K)] 16017K->16017K(19456K), [Metaspace: 2756K->2756K(1056768K)], 0.1011278 secs] [Times: user=0.33 sys=0.00, real=0.10 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.grow(Unknown Source)
at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at com.xiaoysec.test.HeapOOM.main(HeapOOM.java:20)
[Full GC (Ergonomics) [PSYoungGen: 8192K->0K(9216K)] [ParOldGen: 7940K->656K(10240K)] 16132K->656K(19456K), [Metaspace: 2781K->2781K(1056768K)], 0.0056287 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
Heap
PSYoungGen total 9216K, used 82K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
eden space 8192K, 1% used [0x00000000ff600000,0x00000000ff614938,0x00000000ffe00000)
from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
to space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
ParOldGen total 10240K, used 656K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
object space 10240K, 6% used [0x00000000fec00000,0x00000000feca4310,0x00000000ff600000)
Metaspace used 2787K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 307K, capacity 386K, committed 512K, reserved 1048576K
java堆溢出的小栗子的更多相关文章
- java网络爬虫爬虫小栗子
简要介绍: 使用java开发的爬虫小栗子,存储到由zookeeper协调的hbase中 主要过程是模拟Post请求和get请求,html解析,hbase存储 源码:https://github.com ...
- java堆溢出
java堆是用来存储对象实例的:只要不断创建对象,GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,当对象数量达到最大堆的容量限制的时候就会产生内存溢出异常.异常对战信息为OutOf ...
- OutOfMemoryError异常——Java堆溢出。
https://blog.csdn.net/en_joker/article/details/79726975 (将堆的最小值-Xms参数与最大值-Xmx参数设置为一样即可避免堆自动扩展),通过参数- ...
- File Space——一个java structs2.0的小栗子(DIY)
1 概述 File Space系统适用于团体,主要提供的是团队文件分享以及个人文件的存储管理服务.分为个人文件存储管理平台和团队文件共享平台. 个人文件存储平台主要为个人提供相关的文件分类存储服务:该 ...
- (转)《深入理解java虚拟机》学习笔记2——Java内存溢出实例
通过简单的小例子程序,演示java虚拟机各部分内存溢出情况: (1).java堆溢出: Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收 ...
- Java内存溢出示例
按照java内存的结构,发生内存溢出的地方常在于堆.栈.方法区.直接内存. 一.堆溢出 堆溢出原因莫过于对象太多导致,看代码: /** * java 堆溢出 * VM Args:-Xms20m -Xm ...
- Java内存溢出分析方法(Eclipse Memory Analyzer 使用简单入门)
转载至:http://outofmemory.cn/java/jvm/OutOfMemoryError-analysis 工具 安装Memory Analyse Tools(MAT) 工具, 可以直接 ...
- Java内存溢出异常(上)
上一篇文章我们讲了JVM运行时数据区域与内存溢出异常,其中对于内存溢出异常这部分将的不够详细,这篇文章将着重讲解Java内存溢出异常的相关知识.如果有没看过上一篇文章的小伙伴们,请点击Java内存区域 ...
- Java 内存溢出分析
原文地址:Java 内存溢出分析 博客地址:http://www.moonxy.com 一.前言 Java 的 JVM 的内存一般可分为 3 个区:堆(heap).栈(stack)和方法区(metho ...
随机推荐
- Expect:100-Continue & HTTP 417 Expectation[转]
Expect:100-Continue & HTTP 417 Expectation 背景:今天调试火车票查询的代码,发现一个奇怪的事情,如果使用公司本地的代理,那么一切正常,如果使用的是公司 ...
- andengine游戏引擎总结进阶篇1
本篇包括虚拟键盘,粒子系统 1虚拟键盘 分为两种,一种是单个虚拟键盘,另一种是多个方位虚拟键盘 1)加载虚拟键盘所需要的图片资源 private BitmapTextureAtlas mOnScree ...
- DevExpress学习1
为了程序的美观设计,决定用dev控件. 第一步,去官网下载了试用30天的安装包,官网地址:https://www.devexpress.com/,安装完成. 第二步,开始程序下找到DevExpress ...
- SqlServer mssql 按月统计所有部门
以订单统计为例,前端展示柱状图(Jquery统计): 表及主要字段描述如下:表名:Orders1.日期CreateTime2.金额Amount3.用户UserID 情况一:根据部门统计某一年每月销量( ...
- iOS百度推送的基本使用
一.iOS证书指导 在 iOS App 中加入消息推送功能时,必须要在 Apple 的开发者中心网站上申请推送证书,每一个 App 需要申请两个证书,一个在开发测试环境下使用,另一个用于上线到 App ...
- 混淆篇之原生DOM操作方法小结
1.0 DOM结构 1.1先来看结构图: 父节点 兄弟节点 当前节点 属性节点 子节点 兄弟节点一般任意一个节 ...
- VBA基础——循环语句
VBA基础之循环语句 Sub s1() Dim rg As Range For Each rg In Range("a1:b7,d5:e9") If rg = "&quo ...
- JavaSE复习日记 : 循环终止语句(break/break outerFor/continue)
最近没网,但攒了几天的博客,这次逮到机会发博客,直接三篇走起; /* * 循环终止语句: break/ break outerFor/ continue */ /* * break语句 * 1. 用于 ...
- HTTP POST和GET的区别[转]
http://www.cppblog.com/woaidongmao/archive/2008/05/29/51476.aspx 1.HTTP 只有POST和GET 两种命令模式: 2.POST是被设 ...
- js获取当前url参数的两方式
方法一:正则分析法function getQueryString(name) { var reg = new RegExp("(^|&)" + name + &quo ...