堆的核心概述

  1. 堆的核心概述

多个线程共享堆空间
在这里插入图片描述

在这里插入图片描述

95%的垃圾回收集中在堆中,5%在方法区中

在这里插入图片描述

局部变量表(栈帧中)保存了引用,真实的对象存放在堆中,类信息和具体的方法实现保存在方法区中

堆内存的细分(GC垃圾回收选择)

在这里插入图片描述
在这里插入图片描述

堆空间的细分 永久区或者元空间具体是由方法区来落地实现的

也就是说在设置堆区的大小就是新生区+老年区 不包括元空间

新生区:伊甸园区 幸存者1区 幸存者2区 1区和2区只能选择一个使用

  1. 设置堆内存大小与OOM

在这里插入图片描述
在这里插入图片描述

开发中建议把初始内存和最大内存保持一致

避免堆空间的频繁的扩容和减小

OOM 超出了堆可用的最大空间

  1. 在这里插入图片描述

    Eden -> servivor1 或 servivor1 -> old Gen

    默认新生代和老年代空间的大小为 1:2

    比如堆空间为600M 则新生代默认大小为200M 老年代为400M

    新生代中的空间分配 Eden:s1:s2=8:1:1

在这里插入图片描述

  1. 图解对象分配过程

    为每个对象提供了年龄计数器

    伊甸园区满的时候才会触发YGC

    每一次调用YGC就会对对象的位置进行改变

    一旦进行了YGC,伊甸园区就被清空,如果是垃圾,就被回收,如果不是垃圾,就被方法幸存者区

    YGC根据年龄和是否被引用,判断对象的存储位置
    (Eden–> form --> to --> Old)

在这里插入图片描述

C:\Users\布衣\AppData\Roaming\Typora\typora-user-images\image-20200827102904545.png

如果有一个超大对象,伊甸园区放不下,调用YGC,再去看伊甸园区放不放的下,还是放不下,就存放在老年区,如果老年区还是放不下,那么就会报OOM:

在这里插入图片描述

  1. MinorGC MajorGC FullGC

    MinorGC 和 YGC是完全一样的 会新生代进行GC

在这里插入图片描述

年轻代的GC

在这里插入图片描述

Minor GC会引发STW 就是防止表明垃圾之后,用户线程继续产生垃圾

老年代的MajorGC(尽量避免)

在这里插入图片描述

全局的FullGC(尽量避免)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值