热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

标记清除GC

Go语言的GC操作叫“三色标记”,有一些动图GIF来标记这个过程。大概的过程很好理解:起初所有的对象都是白色扫描所有可达对象,将其标记为灰色扫描灰色对象,将其引用对象标记为灰色,自
  1. 起初所有的对象都是白色
  2. 扫描所有可达对象,将其标记为灰色
  3. 扫描灰色对象,将其引用对象标记为灰色,自身标记为黑色

最后,未被标记的白色对象,就是需要被GC回收的。

比较奇怪,在GC过程中,如果对象本身是一个值类型,而不是指针类型,因为值类型压根不存在被引用的关系,那么GC会回收它吗?

GC回收的是堆上分配的对象,单个对象在堆中的存储包含两部分:

---------------
| head | body |
---------------

因为堆就是一块存储空间,这个里面放了很多对象,它需要通过head中的信息来取对应内存位置的对象。当GC执行之后,内存区间就会变的不连续,比如说这样:

----------------------------------------------------------------
| head | body |        | head | body |           | head | body |
----------------------------------------------------------------

这些空白的空间,被称为内存碎片,怎么更高效的使用它们呢?简单的方式是在创建对象的时候,遍历整个堆的空闲内存,如果发现某块空闲内存的空间大于或者等于申请的空间,就直接在这个位置创建。

或者跟memcache一样,把内存空间分成固定大小的内存块,虽然有一些坏处,比如说,如果划分的最小空间是2K,那么,即使创建的对象只需要1K,也需要额外浪费1K的空间。但好处是,在垃圾回收后,能更高效的利用碎片空间。


推荐阅读
  • PHP语言之所以能有今天的地位,得益于PHP语言设计者一直遵从实用主义,将技术的复杂性隐藏在底层。PHP语言入门简单,容易掌握,程序健壮性好。 ... [详细]
  • 在实际开发中,现在安卓端和后台之间的数据交互,一般都是用JSON来传递数据信息。JSON大家一般都比较熟悉。我这边就以实际项目中的后台传过来的情况和大家分析下及如何处理。比如后台返 ... [详细]
  • 0x00端口渗透端口扫描端口的指纹信息(版本信息)端口所对应运行的服务常见的默认端口号.尝试弱口令端口爆破hydra端口弱口令NTScanHs ... [详细]
  • php yac缓存如何清理,yac和memcache性能对比测试
    yac是Laruence开发的一个php进程共享内存的开源项目。详情可以查看。http:www.laruence.com201303182846.htmlmemcache就不用多说 ... [详细]
  • http:simple-is-better.comnews1047Firefly是免费、开源、稳定、快速扩展、能“热更新”的分布式游戏服务器端框架,采用Python编 ... [详细]
  • 下图|通用型_企业用户如何选择合适的云服务器配置?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了企业用户如何选择合适的云服务器配置?相关的知识,希望对你有一定的参考价值。随着网络飞速发展,企业上云已成为 ... [详细]
  • 由PHP转让Memcahce,首先,需要在server安装Memcache,如何安装Memcache这不是本文的重点,大约m ... [详细]
  • yii框架目录结构详细分析说明
    php教程|php手册yii,目录结构php教程-php手册yii框架目录结构详细分析说明猫狗大战源码,华为云电脑ubuntu,梦见放走很多爬虫,parttmpphp,seo页面描 ... [详细]
  • day33  锁和队列
    队列#put和get#__author:liuyang#date:20194160016上午11:32#多进程之间的数据是隔离的#进程之间的数据交互#是可以通过网络文件来实 ... [详细]
  • 转自:MSMIntroduction如果为了简单使用,你只需要安装一个tomcat(6或者7)和memcached,在生产环境中可能会有多台tomcat服务器以及多台可用的memc ... [详细]
  • nosql数据库的基本要求Nosql全称是NotOnlySQL,是一种不同于关系型数据库的数据库管理系统设计方式。对NoSQL最普遍的解释是“非关系型的”,强调Key-ValueS ... [详细]
  • php怎么使用艾特
    导读:很多朋友问到关于php怎么使用艾特的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • 一、NoSQL数据库简介Web1.0的时代,数据访问量很有限,用一夫当关的高性能的单点服务器可以解决大部分问题。随着Web2.0的时代的到来,用户访问量大幅度提升,同时产生了大量的 ... [详细]
  • 我是做产品的,自己平时也做点技术,不过在职业技术人员面前都是不值一提的东西,为了方便以后查阅,索性用DZ搭了个论坛,把网上的一些教程,自己重新编辑后,存在了论坛上。积累技术经验之余,也发现了不 ... [详细]
  • C1、缓存的意义说到分布式系统基本上就离不开缓存,在高并发,大流量的场景下缓存更是扮演着重要的角色。所以作为一个分布式系统的开发人员是必须熟练掌握缓存的使用与设计。下面是一张简单的 ... [详细]
author-avatar
煙feldker_231
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有