JavaScript性能优化-GC算法篇[通俗易懂]

JavaScript性能优化-GC算法篇[通俗易懂]GC算法简介1、GC是一种机制,垃圾回收器完成具体的工作2、工作的内容就是查找垃圾释放空间、回收空间3、算法就是工作时查找和回收所遵循的规则常见的GC算法1、引用计数2、标记清除3、标记整理4、分代回收GC算法之引用计数算法1、核心思想:设置引用数,判断当前引用数是否为02、引用计数器3、引用关系发生改变时改变引用数字4、引用数字为0是立即回收代码演示如下constuser1={age:10};constuser2={age:20};con.

大家好,又见面了,我是你们的朋友全栈君。

在这里插入图片描述

GC算法简介
1、GC是一种机制,垃圾回收器完成具体的工作
2、工作的内容就是查找垃圾释放空间、回收空间
3、算法就是工作时查找和回收所遵循的规则
常见的GC算法
1、引用计数
2、标记清除
3、标记整理
4、分代回收
GC算法之引用计数算法
1、核心思想:设置引用数,判断当前引用数是否为0
2、引用计数器
3、引用关系发生改变时改变引用数字
4、引用数字为0是立即回收

代码演示如下

const user1 = { age: 10 };
const user2 = { age: 20 };
const user3 = { age: 30 };

const nameList = [user1.age, user2.age, user3.age];

function fn() {

    num1 = 10
    
    num2 = 20
    
}

fn()

function fn2() {

    const num1 = 10
    
    const num2 = 20
    
}
fn2()

//在这个全局作用域下 user1 user2 user3 nameList num1 num2

//上面的引用计数都不是0 所以不会被回收

//改造一下

function fn2() {

    const num1 = 10
    
    const num2 = 20
}

fn2() //一旦这行代码执行 也就意味着在全局作用域下找不到num1 和num2

//这个时候num1 和num2 引用计数都是0 这个计数器都会工作 

//把num1和num2占用的空间进行回收
GC算法之引用计数算法优点和缺点
优点:

1、发现垃圾立即回收

2、最大限度减少程序暂停

缺点:

1、无法回收循环引用的对象

function fun3() {

    const obj1 = {}
    
    const obj2 = {}
    
    obj1.name = obj2
    
    obj2.name = obj1
}

fun3()

//虽然在全局作用域下看不到了obj1和obj2 
//但是在内部还存在着引用所以 obj1和obj2的引用计数不是0

2、时间开销大

时刻要维护引用计数导致等待时间较长
GC算法之引用标记清除算法实现原理
1、核心思想:分标记和清除两个阶段完成

2、遍历所有对象找标记活动对象

3、遍历所有对象清除没有标记对象

4、回收相应的空间

总的来说就是两个步骤 

第一步遍历所有可达对象 如果对象还有子属性的话进行递归操作继续遍历
遍历完成后就行标记

第二步找到没有标记的对象进行清除
GC算法之标记清除算法优点和缺点
优点:弥补了引用计数算法的不足,引用计数算法的缺点也可以是看到标记清除算法的优点

缺点:
1、标记-清除算法的比较大的缺点就是垃圾收集后有可能会造成大量的内存碎片
2、不会立即回收垃圾对象
GC算法之标记整理算法实现原理
1、标记整理算法可以看做是标记清除的增强
2、标记阶段的操作和标记清除一致
3、清除阶段先会执行整理,移动对象位置,把分散的对象整合到一起
GC算法之标记整理算法优点和缺点
1、减少碎片空间化
2、不会立即回收垃圾对象

谢谢观看,如有不足,敬请指教

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151614.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 新手小白学JAVA 冒泡排序

    新手小白学JAVA 冒泡排序3冒泡排序bubble3.1概念冒泡排序(BubbleSort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。3.2形式相邻比较,从小到大

    2022年7月19日
    17
  • bootcamp您的磁盘未能分区_bootcamp无法调整分区大小

    bootcamp您的磁盘未能分区_bootcamp无法调整分区大小朋友把macbookpro拿来让我帮删除下用bootcamp安装的win10系统,于是就打开mac进入实用工具->磁盘工具->点击左侧磁盘列表中的MacintoshHD根目录,右侧选择分区,然后点击右侧分区布局列表中的BOOTCAMP,点下面的『-』号,再点移除,系统提示『您的磁盘不能恢复为单一的分区』。    遇到问题找度娘,结果查询出来的结果是,需要重新安装MAC系统,『NT

    2022年8月11日
    8
  • phpstom 2021 激活码【在线注册码/序列号/破解码】

    phpstom 2021 激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    113
  • 花指令_cmp指令

    花指令_cmp指令本文作者:sodme本文出处:http://blog.csdn.net/sodme声明:本文能够不经作者允许随意转载、复制、引用。但不论什么对本文的引用,均须注明本文的作者、出处以及本行声明信息。可能

    2022年8月2日
    7
  • pycharm3.2激活码【在线注册码/序列号/破解码】

    pycharm3.2激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    150
  • MAC pycharm 环境变量设置[通俗易懂]

    MAC pycharm 环境变量设置[通俗易懂]

    2022年8月25日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号