GC 即 垃圾回收(Garbage collection )
垃圾是指:在运行的程序中没有被任何指针指向的对象
,这个对象就是要被回收的垃圾。
如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用,甚至可能导致内存溢出。
Stop-The-World
机制简称 STW,在执行垃圾收集算法时,除了垃圾收集器之外其他所有线程都会被挂起。
从原理上而言,所有的语言都能够自行实现 GC。
有的语言设计时就提供了 GC,有的语言不提供 GC,但可以手动管理内存。
- 提供GC的语言:
Python
JavaScript
Java
Objective-C
Swift- 不提供 GC (手动管理内存,但可以自行实现 GC )的语言:
C
C++- 也有一些语言可以在编译期,依靠编译器插入清理代码的方式,实现精准的清理,例如:Rust
比较\回收算法 | 标记-清除 | 标记-整理 | Scavenge(复制算法) |
---|---|---|---|
速度 | 中等 | 最慢 | 最快 |
空间开销 | 少(有碎片) | 少(无碎片) | 双倍空间(无碎片) |
是否移动对象 | 否 | 是 | 是 |
相关文章
1.各种编程语言的实现都采用了哪些垃圾回收算法?这些算法都有哪些优点和缺点?
2. Go 对比 Java、V8 中 JavaScript 的 GC 性能如何?
3. 一个采用GC的原生程序语言有没有可能性能上超越非GC的原生程序语言?
4. 编译型语言和解释型语言详解