大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!
垃圾回收的过程分为两步:
1.判断对象是否死亡
(1)引用计数器法:
①每当有一个对象引用是,计数器加一,当计数器为0是对象死亡
②缺点:无法解决循环引用的问题,假设A引用B,B引用A,那么这两个对象将不会被回收,造成内存泄漏
(2)可达性算法分析
①通过一系列可作为GC Roots的节点为起始点,从这些节点开始往下搜索,所走过的路径称为引用链。
②当一个对象到GC Roots节点没有引用链时,说明对象不可用
③可作为GC Roots节点的对象
虚拟机栈中引用的对象
本地方法栈中引用的对象
方法区中静态变量引用的对象
方法区中常量引用的对象
2.垃圾回收算法进行回收
(1)标记-清除:即直接将标记为死亡的对象清除,缺点是会产生垃圾碎片
(2)标记-整理:即将可用的对象同意向一端移动,将边界外的对象清除
(3)复制算法:即将堆分为了Eden,SurvivorFrom,SurvivorTo空间
①每次在Eden空间上分配对象
②SurvivorFrom空间为上次垃圾回收是还存活的对象
③SurvivorTo空间为本次垃圾回收是生存的对象存放的位置
④本次垃圾回收结束后交换SurvivorFrom与SurvivorTo
⑤复制算法需要担保空间,当有一个大的对象要分配,而Eden空间又不足时会直接分配到老年代
⑥在对象生存率较高时会进行大量的复制操作,降低效率
(4)分代回收算法:根据新生代与老年代对象的特点而使用不同的垃圾会回收算法
①新生代:对象生存周期较短,只有少量的生存对象,适合使用复制算法
②老年代:对象生存周期较长,只又少量需要回收的对象,且无担保空间,所以使用标记-整理算法或者是标记-清除算法
如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/197356.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...