2.0:JVM大汇总

JVM 运行时内存:
Java 堆从 GC 的角度还可以细分为: 新生代 ( Eden 区 From Survivor 区 To Survivor 区 )和 老年
代。

2.1.1:新生代

       是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象,所以新生代会频繁触发
MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、ServivorTo 三个区。
           1.Eden
             是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象,所以新生代会频 繁               触发MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、ServivorTo 三个                 区。

           2.ServivorFrom

            上一次 GC 的幸存者,作为这一次 GC 的被扫描者。

           3. ServivorTo  
                保留了一次 MinorGC 过程中的幸存者
           4.MinorGC 的过程(复制->清空->互换)
           5.MinorGC 采用 复制算法
                 1 eden servicorFrom 复制到 ServicorTo,年龄+1
                    首先,把 Eden 和 ServivorFrom 区域中存活的对象复制到 ServicorTo 区域(如果有                        对象的年 龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年 +1                     (如果ServicorTo 不 够位置了就放到老年区);
                2 :清空 eden servicorFrom 然后,清空 Eden 和 ServicorFrom 中的对象;
                3 ServicorTo ServicorFrom 互换
                  最后,ServicorTo 和 ServicorFrom 互换,原 ServicorTo 成为下一次 GC 时的                                  ServicorFrom 区。

 2.2:垃圾回收与算法

 2.2.1:如何确定垃圾

                1.引用计数法:   在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单 的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关 联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收 对象

                2. 可达性分析:

              为了解决引用计数法的循环引用问题,Java 使用了可达性分析的方法。通过一系列的“GC roots” 对象作为起点搜索。如 果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的 。要注意的是,不可达对象不等价于可回收对象, 不可达对象变为可回收对象至少要经过两次标记 过程 。两次标记后仍然是可回收对象,则将面临回收。
                3.标记清除算法( Mark-Sweep
                最基础的垃圾回收算法,分为 两个阶段,标注和清除 。标记阶段标记出所有需要回收的对象,清 除阶段回收被标记的对象所占用的空间。如图

 

从图中我们就可以发现,该算法 最大的问题是内存碎片化严重 ,后续可能发生大对象不能找到可
利用空间的问题。                    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值