当前位置: 首页 > news >正文

jvm垃圾回收的过程

如果大家对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不再是梦想!

架构殿堂

相关文章:

  • 到底什么是分布式锁,进程锁,线程锁
  • 晶振參数校定
  • 这样做能让nginx新能提升10倍
  • 查看项目错误信息
  • 简单说明String类为什么是final的
  • RocketMQ启动broker提示 错误:找不到或无法加载主类
  • CSS盒子模型
  • 总结HashMap和TreeMap的区别
  • Spring AOP中pointcut expression表达式解析 及匹配多个条件
  • typora+picgo+gitee,轻松搞定图片上传
  • 转载-C#事件的使用和讲解
  • 详细描述Error和Exception(运行期和编译期)的区别
  • 线程的生命周期以及状态
  • ArcGIS AddIn调用ArcMap自带的对话框
  • 总结Synchronized与Lock的区别
  • 网络传输文件的问题
  • [译]如何构建服务器端web组件,为何要构建?
  • 【个人向】《HTTP图解》阅后小结
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 阿里云Kubernetes容器服务上体验Knative
  • 给Prometheus造假数据的方法
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 盘点那些不知名却常用的 Git 操作
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用 @font-face
  • 使用agvtool更改app version/build
  • 突破自己的技术思维
  • 微信小程序开发问题汇总
  • 线性表及其算法(java实现)
  • 一道面试题引发的“血案”
  • 一起参Ember.js讨论、问答社区。
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 怎么将电脑中的声音录制成WAV格式
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 我们雇佣了一只大猴子...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $.ajax()
  • (java)关于Thread的挂起和恢复
  • (LeetCode C++)盛最多水的容器
  • (转)h264中avc和flv数据的解析
  • (转)memcache、redis缓存
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)(官方)UE4--图像编程----着色器开发
  • .axf 转化 .bin文件 的方法
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .FileZilla的使用和主动模式被动模式介绍
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET CORE Aws S3 使用
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core 和 .NET Framework 中的 MEF2