学习笔记——常识解答之垃圾回收机制

垃圾回收机制

1. 什么是垃圾

js 复制代码
let obj = {
  data: "hello",
};
/* 引用类型 的数据存储在堆内存中 栈内存中存储的引用地址 */
/* 如果我们给obj 赋值一个新值 那么obj 引用地址会变 */
obj = {
  test: "test",
};
/* 那这个时候 堆内存中就会有两个对象数据存储 那这个 {data: "hello",} 已经无效了 如果没垃圾回收机制 这种存储的越来越多 就会导致我们内存溢出程序崩溃,所以我们需要垃圾回收机制 */

2. 垃圾回收机制处理办法以及优缺点

2.1、垃圾回收机制

标记清除法:

标记:从根(全局变量、当前函数的局部作用域开始)标记"可达对象"为活跃对象

清除:将没有被标记的对象清除

  • 优点:
    • 标记 - 清除 简单好操作 easy ~ easy~ 不移动对象
  • 缺点: ||| | | || ||| ||| 内存碎片化
    • 会造成内存碎片化 需要使用特定的算法进行内存分配
    • 如 找到第一个符合条件的内存块分配
    • 如 找到所有列表中大于等于所需内存的最小内存快进行分配
    • 如 找到最大内存进行拆分 size 大小 进行分配
      看到时间复杂度是 0(n)
      引用计数法:
      引用: 存在一个变量用来记录 这个对象有没有被引用,引用+1 , 赋值 -1 ,如果引用为 0 表示没有被引用
      清除:将引用为 0 的对象清除
      • 优点:
        • 简单好操作
      • 缺点:
        • 无法解决循环引用的问题

3. 新生代、老生代

3.1、新生代

新创建的对象、存活时间短

空间分为: 空闲区、使用区

新对象在使用区 垃圾回收机制:将标记活动对象放到空闲区 清除不活跃对象
互换空间 再去反复操作 将复制多次依旧没有被清除的对象 放到 老生代中

js 复制代码
// 晋升条件(示例):
// 1. 对象超过25个存活周期
// 2. To空间使用超过25%
// 3. 对象体积超过新生代空间限制
3.2、老生代

存活时间长

垃圾回收机制:
标记清除 & 标记整理算法来解决这一问题来优化空间

4. 增量标记与懒性清理

知识储备: 三色标记法(暂停与恢复) 白 - 灰 - 黑

暂停之后有灰色 则 继续 判断标记

没有灰色 直接进行垃圾清除

存在为问题和解决方案:

❓:写屏障(增量中修改引用)

💡:一旦有黑色对象引用白色对象,直接强制灰

相关推荐
techzhi4 分钟前
Apifox CLI + GitLab CI:接口自动化测试实施记录
java·ci/cd·kubernetes·gitlab·yapi·运维开发·fastapi
im_AMBER7 分钟前
数据结构 18 【复习】广义表 | 各种内部排序 | 二叉排序树的平均查找长度 ASL
数据结构·笔记·学习·排序算法
世人万千丶10 分钟前
鸿蒙跨端框架Flutter学习day 2、常用UI组件-层叠布局 Stack & Positioned
学习·flutter·ui·实时互动·harmonyos·鸿蒙
好奇龙猫12 分钟前
【人工智能学习-AI入试相关题目练习-第四次】
人工智能·学习
我爱娃哈哈12 分钟前
SpringBoot + XXL-JOB + Quartz:任务调度双引擎选型与高可用调度平台搭建
java·spring boot·后端
马克学长15 分钟前
SSM学生出国境学习交流管理87153(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·学习·ssm 框架·学生出国境管理·在线申请
小宇的天下20 分钟前
Synopsys Technology File and Routing Rules Reference Manual (1)
java·服务器·前端
chilavert31828 分钟前
DashGO框架开发应用的笔记-1
笔记
Coder_Boy_30 分钟前
基于SpringAI的在线考试系统-AI智能化拓展
java·大数据·人工智能·spring boot
n***333534 分钟前
TCP/IP协议栈深度解析技术文章大纲
java·spring boot