JVM笔记-13运行时数据区-堆(OOM、年轻代老年代)

学习JVM的一点简单笔记,宋红康老师jvm讲的很好,感谢。

尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)


OOM

异常是什么?

堆空间溢出,存放数据大于堆空间大小。
在这里插入图片描述


package com.hut.djh;

import java.util.ArrayList;
import java.util.Random;

/**
 * @Author: 秃头不用洗发水
 * @Date: 2021-02-23
 * @Description: OOM
 * -Xms600m -Xmx600m 设置起始和最大内存
 */
public class Test4 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        while(true){
        try {
            Thread.sleep(20);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        list.add(new picture(new Random().nextInt(1024*1024)));
        }
    }
}

class picture{
    private byte[] pictures;

    public picture(int len){
        this.pictures = new byte[len];
    }
}


设置虚拟机大小
在这里插入图片描述
在cmd中,使用jvisualvm 打开 Java VisualVM 提前安装插件gc,用于观察。
在这里插入图片描述
运行代码。
在这里插入图片描述
老年代和伊甸园区和一个幸存者区满了,即OOM。
在这里插入图片描述
可以观察运行情况。


年轻代、老年代

生命周期划分。

链接操作的对象,生命周期会比较长。
在这里插入图片描述
伊甸园区:对象最先创建对象的位置。

幸存者区:没有消亡的对象,就幸存下来,在幸存者区。

经过一定gc后,放入老年代。

在这里插入图片描述
声明周期长的对象多,可以把老年代设置大一点。

新生代:老年代默认比例 = 1:2
伊甸园区:幸存者区 = 8:1:1
(但实际使用不是8:1:1,存在自适应内存分配机制,可以关闭或者显式设置比例)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当-Xmn和-XX:NewRatio 两者同时使用时,以-Xmn为主。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值