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

jvm 07 GC算法,内存池

01 垃圾判断算法
1.1引用计数算法

最简单的垃圾判断算法。在对象中添加一个属性用于标记对象被引用的次数,每多一个其他对象引用,计数+1,
当引用失效时,计数-1,如果计数=0,表示没有其他对象引用,就可以被回收。这个算法无法解决循环依赖的问题。

在这里插入图片描述
1.2 可达性分析算法

通过一系列被称为“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系链向下搜索,
如果某个对象无法被搜索到,则说明该对象无引用执行,可回收。相反,则对象处于存活状态,不可回收。JVM中的实现是找到存活对象,未打标记的就是无用对象,GC时会回收。

在这里插入图片描述
02.垃圾回收算法

2.1标记-清除算法

标记:Collector 从引用根节点开始遍历,标记所有被引用的对象。一般是在对象的 Header 中记录为可达对象。标记的是引用的对象,不是垃圾!!

清除:Collector 对堆内存从头到尾进行线性的遍历,如果发现某个对象在其 Header中 没有标记为可达对象,则将其回收。
在这里插入图片描述

 不足:
1效率问题:标记和清除两个过程的效率都不高。2空间问题:标记清除后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要 分配较大对象时,无法找到足够的连续内存而不得不提前出发另一次垃圾收集动作。

2.2 复制算法(Copying)
1将原有的内存空间分为两块,每次只使用一块,

2在垃圾回收时,将正在使用的内存中的存活对象复制到未被使用的内存块中,然后清除正在使用的内存块中的所有对象。

3交换两个内存的角色,完成垃圾回收。在这里插入图片描述

2.3 标记—整理算法(Mark-Compact)

1标记阶段:先通过根节点,标记所有从根节点开始的可达对象,未被标记的为垃圾对象

2整理阶段:将所有的存活对象压缩到内存的一段,之后清理边界外所有的空间
在这里插入图片描述
标记-压缩算法

 适合用于存活对象较多的场合,如老年代。它在标记-清除算法的基础上做了一些优化。和标记-清除算法一样,标记-压缩算法也首先需要从根节点开始,对所有可达对象做一次标记。但之后,它并不简单的清理未标记的对象,而是将所有的存活对象压缩到内存的一端。之后,清理边界外所有的空间。

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 开源科学工程技术软件
  • 【docker 部署springboot项目】
  • 第一章 Typescript小白快速入门
  • Flowable-流程图标与流程演示
  • Flutter对接FlutterBugly 报错Zone mismatch
  • 鸿蒙开发 -本地数据库操作
  • InjectFix 热更新解决方案
  • LVS+Nginx高可用集群---keepalived原理与实战
  • 捷配PCB打样采用机械盲埋孔制造,有何优势?
  • 硅纪元视角 | 微软开发全新AI模型,革新电子表格处理效率!
  • 排队问题--逆序对应用
  • 使用druid对sql进行血缘解析
  • 去除重复字母
  • Python酷库之旅-第三方库Pandas(027)
  • 分类题解清单
  • “大数据应用场景”之隔壁老王(连载四)
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 03Go 类型总结
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Apache Pulsar 2.1 重磅发布
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • JS实现简单的MVC模式开发小游戏
  • Logstash 参考指南(目录)
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • MySQL的数据类型
  • Python连接Oracle
  • React Native移动开发实战-3-实现页面间的数据传递
  • SQLServer之创建数据库快照
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Webpack 4 学习01(基础配置)
  • 创建一种深思熟虑的文化
  • 浮现式设计
  • 聊聊flink的BlobWriter
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 微信小程序实战练习(仿五洲到家微信版)
  • 我建了一个叫Hello World的项目
  • 优秀架构师必须掌握的架构思维
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • # Redis 入门到精通(一)数据类型(4)
  • # 飞书APP集成平台-数字化落地
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #单片机(TB6600驱动42步进电机)
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (过滤器)Filter和(监听器)listener
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (十一)图像的罗伯特梯度锐化
  • (四)JPA - JQPL 实现增删改查
  • (四)linux文件内容查看