GC 垃圾回收机制

GC 是什么?

GC 即 垃圾回收(Garbage collection )
垃圾是指:在运行的程序中没有被任何指针指向的对象,这个对象就是要被回收的垃圾。

如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用,甚至可能导致内存溢出。

  • 确定对象生命周期然后垃圾回收
  • 对特定大小的对象开设内存池,整理出的内存分配给新的对象

Stop-The-World 机制简称 STW,在执行垃圾收集算法时,除了垃圾收集器之外其他所有线程都会被挂起。

哪些语言提供 GC ?

从原理上而言,所有的语言都能够自行实现 GC。

有的语言设计时就提供了 GC,有的语言不提供 GC,但可以手动管理内存。

  • 提供GC的语言:
    Python
    JavaScript
    Java
    Objective-C
    Swift
  • 不提供 GC (手动管理内存,但可以自行实现 GC )的语言:
    C
    C++
  • 也有一些语言可以在编译期,依靠编译器插入清理代码的方式,实现精准的清理,例如:Rust

手动管理内存(没有GC)的优缺点

  • 劣势(运行时可能发生的错误):
    • 在仍然有指向内存区块的指针的情况下释放这块内存时,会产生悬挂指针,从而后续可能错误的访问已经用于他用的内存区域。
    • 多重释放同一块申请的内存区域可能导致不可知的内存损坏。
  • 优势:
    • 没有额外的性能开销
    • 精准的手动内存管理,极致的利用机器的性能

3种垃圾回收算法的简单对比

比较\回收算法标记-清除标记-整理Scavenge(复制算法)
速度中等最慢最快
空间开销少(有碎片)少(无碎片)双倍空间(无碎片)
是否移动对象

相关文章
1.各种编程语言的实现都采用了哪些垃圾回收算法?这些算法都有哪些优点和缺点?
2. Go 对比 Java、V8 中 JavaScript 的 GC 性能如何?
3. 一个采用GC的原生程序语言有没有可能性能上超越非GC的原生程序语言?
4. 编译型语言和解释型语言详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值