`
godlovesdog
  • 浏览: 99442 次
社区版块
存档分类
最新评论

GC浅记

 
阅读更多

翻译:http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)

之前用c/c++,没有GC的概念,后来用php只知道是采用引用计数的方式进行垃圾回收。

学习go时,很多人说go的GC有问题,为此本篇从概念上一探究竟——GC是干嘛的?

概念

GC(garbage collection)是自动内存管理的意思,自动释放不再被对方占用的内存。

与之相对的是手动垃圾回收——由程序员告诉操作系统哪些内容没有被使用,并交还给操作系统(free,delete)

好处

  • 开发高效
  • 不用担心double free等内存泄露问题

坏处

  •  CPU计算开销:找出要释放的内存,有可能导致程序短时间卡顿
  • GC时间无法预期, 对于硬实时环境、事务处理或交互式系统中可能无法接受GC时延

算法

常见的有两类算法:

  • 跟踪性GC(mark-sweep)
  • 引用计数

跟踪性GC

最常用的一种方式。包含两部:1.标记处那些正在被使用的对象(mark阶段);2.清理未被标记的对象(sweep)

go语言就采用这种方式,会导致内存野蛮生长,最终GC时出现卡顿

引用计数GC

为每个对象维护一个计数,每引用一次计数+1,每销毁一次计数-1。当引用计数为0时,认为是垃圾,被立即清除。

有如下缺点:

1.存在循环引用的风险

两个对象互相引用彼此,不过有特定算法可解决这个问题。

2.空间开销

3.性能开销

4.增减计数必须为原子操作

分享到:
评论

相关推荐

    windows 2003 DNS系列详细教程

    "浅谈DNS体系结构"文档将介绍主次服务器、缓存服务器的角色,以及区域传输和DNS查询的工作流程,帮助读者理解这个复杂但高效的服务是如何运行的。 接下来,DNS系列之二“详解DNS的常用记录(上)”涵盖了DNS记录的...

    jvm原理分析课程笔记

    在压缩包中,"1JVM入门.pdf"可能涵盖了JVM的基本概念和工作流程,"2JVM浅出笔记.pdf"可能进一步解释了JVM的关键特性,"8笔记10.pdf"到"7笔记7.pdf"、"5笔记5.pdf"、"6笔记6.pdf"、"4笔记4.pdf"、"3笔记.pdf"可能分别...

    提升网页游戏性能浅谈——缓冲池

    ### 提升网页游戏性能浅谈——缓冲池 在网页游戏开发的过程中,特别是在使用Actionscript 3.0开发MMORPG类网页游戏时,游戏性能往往成为开发者关注的重点。随着技术的发展,网页游戏不仅要求具备良好的视觉效果,还...

    深入浅出jvm虚拟机视频大全(jvm性能调优+内存模型+虚拟机原理)

    使用JVisualVM、JConsole等工具监控JVM的运行状态,定期检查GC日志,分析对象的创建和销毁情况,从而找出性能瓶颈并针对性地进行优化。例如,JVisualVM提供了丰富的监控功能,可以帮助开发者深入了解JVM的内存使用...

    JVM面试专题.pdf

    - **新生代(Young Generation)**:包括Eden和两个Survivor区,新生对象首先在Eden区分配,经过YGC(Minor GC)后,存活的对象移到Survivor区,多次GC后仍存活的对象进入老年代。 - **老年代(Tenured Generation...

    浅谈Java内存区域划分和内存分配策略

    "浅谈Java内存区域划分和内存分配策略" 本文将详细讲述Java内存区域划分和内存分配策略,涵盖程序计数器、虚拟机栈、本地方法栈、堆、方法区等内存区域的概念和作用,以及对象创建过程和内存分配策略。 程序计数器...

    高级开发jvm面试题和答案.pdf

    了解JVM的内存结构、对象创建过程、类加载机制以及垃圾回收(GC)等知识点对于高级开发人员来说至关重要。 1. JVM内存结构: - **堆(Heap)**:主要存放对象实例,是线程共享的区域,分为新生代(Young ...

    JVM内存模型(通俗易懂)

    本文将深入浅出地探讨JVM内存模型,帮助你快速掌握这一核心概念。 首先,我们要知道JVM内存模型主要分为以下几个区域: 1. **程序计数器(Program Counter Register)**:每个线程都有一个独立的程序计数器,用于...

    浅谈Java引用和Threadlocal的那些事

    浅谈Java引用和Threadlocal的那些事 本文主要介绍了Java引用和Threadlocal的知识点,包括Java中的引用类型、Threadlocal的使用等。 Java中的引用类型: Java中有四种引用类型:强引用(Strong Reference)、软...

    Java面试八股文十万字总结.docx

    - **Minor GC与Full GC触发时机**:新生代满触发Minor GC,老年代满触发Full GC。 - **JVM性能调优参数**:堆大小、垃圾收集器选择等。 - **逃逸分析技术**:判断对象的使用范围,优化内存分配。 - **元空间替代永久...

    jvm_code-master.rar

    1. 对象创建与内存分配:包括浅拷贝、深拷贝、对象池等概念,以及如何优化对象创建过程。 2. 内存管理与垃圾收集(GC):讲解不同类型的垃圾收集器,如串行GC、并行GC、CMS和G1,以及内存泄漏检测和预防。 3. 类...

    Java面试题及答案(超完整).pdf

    当老年代空间不足时,会触发Major GC或Full GC,这可能导致更长时间的暂停。 除了上述内容,Java面试还可能涵盖其他主题,如集合框架、并发编程、IO流、异常处理、设计模式、Spring框架、JDBC以及数据库相关知识等...

    参考资料-9-5工程施工监理.doc

    - **GFI-GC-5《隐蔽工程验收工作细则》**至**GFI-GC-47《细石混凝土屋面质量监理细则》**:涵盖了从浅基础、主体结构到装修阶段的各项具体工程监理细则。 ### 四、职责划分 文档明确了不同角色的责任与权限: - **...

    PHP变量内存分配问题记录整理

    - 另外,使用垃圾收集器(GC)来清理不再使用的循环引用对象也是一个解决方式,PHP内置了垃圾收集机制来处理内存管理问题。 5. 避免内存问题的建议: - 理解浅拷贝和深拷贝的区别,根据实际需要编写代码。 - ...

    大学生--仪器分析--复习.pdf

    色谱分析法是仪器分析中的重要分支,按照流动相的状态,可以分为气相色谱法(GC)和液相色谱法(LC)。GC 使用气体作为流动相,根据固定相的不同,又可分为气-固色谱法和气-液色谱法。而LC则以液体为流动相,同样...

    面经:亿联网络(yealink)

     感觉面试非常标准,面试官问的题目多,深度浅,感觉是以量取胜,30min,大厂的面试题变化不大,可以看看已经面试过同学的面经 面经: 1.自我介绍 2.项目介绍 3.JVM内存划分以及GC算法 4.聊一下mysql索引和优化 5....

    浅谈java内存管理与内存溢出异常

    而在Java中,JVM自动管理内存,使用垃圾收集器(Garbage Collector, GC)来自动回收不再使用的对象,从而减轻了程序员的负担。然而,尽管如此,理解JVM的内存结构对于识别和解决内存问题至关重要。 JVM运行时数据区...

    TCPIP详解--共三卷

    TCP/IP详解 卷1:协议 译者序 前言 第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 ...1.7 ...

Global site tag (gtag.js) - Google Analytics