垃圾回收机制、算法、对象是否回收判断依据、GC分类、年轻代、老年代、触发fullGC的条件、晋升到老年代的方法条件

垃圾回收回收算法:

1.标记清除算法(Mark and Sweep)
mark:从根进行扫描,对存活的对象进行标记
Sweep:对堆内存从头到尾进行线性遍历,回收不可达对象内存
其中未被标记的对象即为不可达对象,就会被回收,会导致一些不连续的内存碎片,空间碎片化,当需要有一个更大内存的对象存储时会进行下一次垃圾回收操作
2.标记复制算法
将内存分为对象面和空闲面,在对象面创建对象,存活的对象会被复制到空闲面上,最后将对象面的所有对象内存清除
适用于对象存活率低的情况,年轻代一般10%存活,因此需要复制的相对较少,所以效率会高一点。
解决碎片化问题,并且顺序分配内存,简单高效。

3.标记整理算法(Compacting)
标记:从根集合进行扫描,对存活的对象进行标记
整理:将存活的对象按内存地址次序依次排列,然后将末端内存地址以后的内存全部回收,在标记清除算法的基础上进行了内存地址的移动,成本虽高,但解决内存碎片化问题,适用于存活率高的场景,比如分代收集算法中老年代的回收。

4.分代回收算法(Generational Collector)
根据不同对象有不同的生命周期划分的不同区域针对性的使用垃圾回收算法来更好的提升JVM的回收效率。
在jdk7及其以前堆内存分为 年轻代、老年代、永久代三个模块
在jdk8及其以后的版本将永久代去掉了,只剩下了年轻代和老年代
年轻带存活率低用复制算法
老年代存活率高用标记整理算法或标记清理算法

怎么看该对象是否回收(对象存活性判断)

1.引用计数法:
判断一个对象的引用数量来作为是否是垃圾的依据,引用技术算法是每个实例化的对象都有一个引用计数器,当对象被引用时就会+1,对象完成引用时就-1,比如局部变量,当方法执行完后,就完成了引用,即-1.,最后当引用计数为0的对象实例就可以被当作垃圾收集器
引用计数算法的优点:
过滤出引用计数为0的情况不打断程序执行,因此执行效率高。
引用计数算法的缺点:
当出现两个对象相互引用即循环引用情况就无法检测出,会导致内存泄露

2.对象可达性分析
判断对象的引用链是否可达来决定对象是否可以被回收,可达性算法是从离散数学中的图论中引出,把所有的引用关系看作一张图通过一系列的名为GCRoot为起始点,从这些节点向下搜索,搜索走过的路径就被称为引用链referencechain当一个对象从GCRoot开始没有任何引用链项链,从图论上说就是从GCRoot到对象之间是不可达的,这个对象就被标记为垃圾,回收器就会清理。
可作为GC Root的对象如下:
虚拟机栈中引入的对象,就是new出来的
方法区中的常量引用的对象
方法区中的静态属性引用的对象
活跃线程引用对象
本地方法栈中JNI(Native方法)的引用对象
你是怎么认识垃圾回收:

被判定为垃圾的标准是没有价值,在java中没有被其他对象引用的对象,对于系统来说就是垃圾,其所占据的内存需要被释放,同时该对象就会被销毁;

GC的分类:

Minor Gc 发生在年轻代中的垃圾收集,采用复制算法,年轻代几乎是所有Java对象出生地,java对象申请或存放都在这里,大部分对象生命周期很短,新生代是GC进行垃圾收集的频繁地区

Full GC 与老年代有关,老年代的回收都伴随年轻代的收集

分代收集中对象如何晋升到老年代:

1.长期存活的对象会进入老年代
对象在年轻代每经历过一次Minor GC依然存活则年龄+1若年龄超过一定限制时(默认值)则被晋升到老年代
2.Eden或Survivor区中放不下的对象直接进入老年代中,对象优先在Eden中分配,当Eden区满后会触发一次MinorGC,将存活的对象复制到Survivor中此过程结束后Eden区会被清空,如果Survivor区满了就会晋升到老年代。
3.大对象将会直接到老年代可以通过 -xx:+PretenuerSizeThreshold 来控制大对象的大小

常用的调优参数:
在这里插入图片描述

老年代:

在这里插入图片描述

Full和Major GC
Full GC比Minor GC满,但执行频率低

触发FullGC的条件:

当创建的对象太大,老年代空间不足
永久代空间不足jdk6以前版本
Minor GC 晋升到老年代的平均大小大于老年代的剩余空间
调用System.gc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值