什么是垃圾回收机制(超详细)

垃圾回收机制

        1.垃圾回收机制(Garbage Collction)简称GC,是JavaScript中使用的内存管理系统的基本组部分,是为了防止内存泄漏

        2.JavaScript是在创建变量(对象、字符串等)时自动进行了分配内存,并且在不使用他们时“自动释放。”

        3.内存在不适用的时候就被垃圾回收器自动回收

内存的生命周期

        JS环境中分配的内存,一般有如下生命周期:

        1.内存分配:当我们声明变量、函数、对象的时候,系统会自动为他们分配内存

        2.内存使用:即读写内存,也就是使用变量、函数等

        3.内存回收:使用完毕,由垃圾回收自动回收不再使用的内存

垃圾回收的算法说明

        所谓垃圾回收,核心思想就是如何判断内存是否已经不再会被使用了,如果是,就视为垃圾给释放掉

        下面介绍两种常见的浏览器垃圾回收算法:引用计数法标记清除法

        1.引用计数

        IE采用的引用计数算法,定义“内存不再使用”的标准很简单,就是看一个对象是否有指向它的引用

        算法

        1.跟踪记录每个值被引用的次数。

        2.如果这个值被引用了一次,那么就会被记录一次。

        3.多次引用会累加。

        4.如果减少一个引用就减1。

        5.如果引用次数是0,则释放内存。

        缺点:循环引用

        如果两个对象对象互相引用,尽管他们已不再使用,垃圾回收器不会进行回收,导致内存泄漏。

        2.标记清除法

        现代的浏览器已经不再使用引用计数法了

        现代浏览通用的大多是基于标记清除算法的某些改进算法,总体思想都是一致的

        核心:

        1.标记清除算法将“不再使用的对象”定义为“无法达到的对象”。

        2.标记:就是从根部(在js中就是全局对象)出发定时扫描内存中的对象。凡是能从根部到达的对象,都是还需要使用的。

        3.回收:那些无法由根部出发触及到的对象被标记为不再使用。

        

 

  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的垃圾回收机制是Java语言的一项重要特性,它可以自动管理内存,减轻了程序员手动释放内存的负担。Java的垃圾回收机制主要通过垃圾收集器(Garbage Collector)来实现。 在Java中,当一个对象不再被引用时,就可以被判定为垃圾。垃圾收集器会定期扫描堆内存,找出不再被引用的对象,并将其回收释放内存空间。这样,程序员就不需要手动释放对象所占用的内存,大大简化了内存管理的工作。 Java的垃圾回收机制基于以下两个核心概念: 1. 引用计数法:每个对象都有一个引用计数器,当有新的引用指向该对象时,计数器加1;当引用失效时,计数器减1。当计数器为0时,表示该对象不再被引用,可以被回收。但是,引用计数法无法解决循环引用的问题,即两个或多个对象相互引用,但与程序的根节点没有直接引用关系,导致无法被回收。 2. 可达性分析算法:Java的垃圾回收机制采用可达性分析算法来判断对象是否可被回收。该算法从程序的根节点(如静态变量、方法参数等)出发,通过引用链追踪对象的引用关系,如果一个对象不可达(即无法通过引用链与根节点相连),则被判定为垃圾,可以被回收。 Java的垃圾回收机制具有以下优点: 1. 简化了内存管理,减少了内存泄漏和野指针等问题的发生。 2. 提高了程序的可靠性和稳定性,减少了因为内存管理错误导致的程序崩溃。 3. 提高了开发效率,程序员不需要手动释放内存,可以更专注于业务逻辑的实现。 然而,垃圾回收机制也存在一些缺点: 1. 垃圾回收过程会占用一定的系统资源,可能会导致程序的运行速度变慢。 2. 垃圾回收的时间是不确定的,可能会导致程序在某些时刻出现短暂的停顿。 相关问题: 1. Java的垃圾回收机制是如何工作的? 2. 什么是引用计数法?它有什么缺点? 3. 什么是可达性分析算法?它如何判断对象是否可被回收? 4. 垃圾回收机制有哪些优点和缺点?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值