Mono支持内存自动回收,因为MONO集成了内存回收算法。在1.X到2.X的版本中,MONO集成了贝母内存管理及回收算法;而在3.X或更高版本中,则开始启用SGEN内存管理及回收算法。

BOEHM属于一个开源项目,其实现为支持C/C++的内存管理及GC,在C/C++项目中,将分配内存部分接口(malloc或者其他分配内存等接口)替换成BOEHM提供的内存分配接口(GC_malloc),则可以在C/C++项目中实现内存自动管理,无需手动调用free等释放内存接口。而MONO正是基于BOEHM,实现了内存管理及自动GC。

GC实现的方式
引用计数算法:引用技术算法是唯一一种不用用到根集概念的GC算法。其基本思路是为每个对象加一个计数器,计数器记录的是所有指向该对象的引用数量。每次有一个新的引用指向这个对象时,计数器加一;反之,如果指向该对象的引用被置空或指向其它对象,则计数器减一。当计数器的值为0时,则自动删除这个对象。

Mark&Sweep算法:也叫标记清除算法,标记阶段通过标记所有根节点可达的对象,未被标记的对象则表示无引用,可回收,BOEHM正是使用该算法实现内存自动回收; 节点复制算法:将活的节点复制到新内存区,老内存区一次性释放,对象会被转移,应该还需要设置元数据中间层;

贝母算法原理:
BOEHM算法采用标记清除法,在标记阶段通过访问根节点,并遍历到叶子节点,最终将所有存在引用的内存都标记出来,而未标记的内存(所有从堆中分配的内存BOEHM中均有记录,因此可将未标记的部分清除释放掉。
具体如下:
The garbage collector uses a modified mark-sweep algorithm. Conceptually it
operates roughly in four phases, which are performed occasionally as part of
a memory allocation:
垃圾收集器使用了修改后的标记扫描算法。从概念上讲大致分为四个阶段运作,这四个阶段作为内存分配部分被偶尔执行。

Preparation Each object has an associated mark bit. Clear all mark bits, indicating that all objects are potentially unreachable.
起始每个对象都有一个关联的标记位。清除所有标记位,预示所有对象都是潜在无法访问。

Mark phase Marks all objects that can be reachable via chains of pointers from variables. Often the collector has no real information about the location of pointer variables in the heap, so it views all static data areas, stacks and registers as potentially containing pointers.
标记阶段标记所有对象,这些对象可通过指针链表被访问。通常收集器没有指针变量在堆中位置的真实信息,因此它查看所有静态数据区,堆栈和注册器为可能包含指针。

Any bit patterns that represent addresses inside heap objects managed by the collector are viewed as pointers. Unless the client program has made heap object layout information available to the collector, any heap objects found to be reachable from variables are again scanned similarly.
任何位模式被视为指针,位模式代表堆内被收集器管理的对象的地址。除非客户程序已使堆对象布局可供信息收集器使用,否则从所以对象中重复扫描直到找到的所有可访问变量。

Sweep phase Scans the heap for inaccessible, and hence unmarked,objects, and returns them to an appropriate free list for reuse. This is not really a separate phase; even in non incremental mode this is operation is usually performed on demand during an allocation that discovers an empty free list. Thus the sweep phase is very unlikely to touch a page that would not have been touched shortly thereafter anyway.
扫描阶段扫描堆上无法访问的、未标记的、对象,并将其返回给适当的空闲列表以供重用。这并不是一个独立的阶段;甚至在非增量模式下,这是操作通常在分配期间的需求发现一个空的空闲列表。因此扫描阶段极无论如何不可能触及一个此后不久便触及的页面。

Finalization phase Unreachable objects which had been registered for finalization are enqueued for finalization outside the collector.
完成阶段已注册的无法访问的对象最终入队在收集器外部完成。

参考:
https://mp.weixin.qq.com/s?__biz=MzI3NjIwNjA1Ng==&mid=2650438526&idx=1&sn=7d379ccdd16ef10f904c6c75255402a4&chksm=f377c3f9c4004aef0489938829b91c90721c966d17eb219b3ab8ed0fda99534566d1eb232b6b&scene=21#wechat_redirect

Unity GC 算法->Boehm GC algorithm相关推荐

  1. 常见的GC算法(GC的背景与原理)

    常见的GC算法(GC的背景与原理) GC 是英文词汇Garbage Collection的缩写,中文一般直译为 "垃圾收集".当然也会说 "垃圾回收". 三种垃 ...

  2. GC算法与GC收集器

    Java相比于C++这样语言,除了跨平台的特性外,最突出的特点就是垃圾回收机制.C++的开发人员还需要手动分配和回收内存,但JVM直接承担起了垃圾回收的重任,开发人员可以专注于业务开发,不需要再去关心 ...

  3. Unity内存管理和GC优化

    目录 [性能优化]内存管理和GC优化 前言 内存优化思维导图 一.托管堆基础知识学习 1.1. Unity游戏运行时内存占用分以下几部分: 1.2 GC和堆内存联系 二.垃圾回收何时触发 三.GC如何 ...

  4. JVM内存调优之GC算法

    初识JVM JVM简介 虽然理解JVM不是开发或运行Java程序的必要条件,但是多了解一些JVM知识,那么就可以避免很多性能上的问题. Java虚拟机(JVM)指的是Java应用的运行环境,从一般意义 ...

  5. BOEHM GC原理及总结

    BOEHM GC原理 从上次分配原理中知道,给出一个指针,可以根据二级数组找到HBLKHDR的描述信息,根据HBLKHDR又能知道其对应的OBJ大小.再根据指针对齐原理,知道指针会存储在OBJ内的地方 ...

  6. JVM原理优化GC算法

    JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 创建JVM装载环境和配置 装载JVM.dll 初始化JVM.dll并挂界到JNIEN ...

  7. JDK默认GC算法是个谜

    JDK默认GC算法是个谜 背景 我们系统采用openjdk:8u212-b04-jdk-stretch作为基础镜像,java -version命令输出: openjdk version "1 ...

  8. 深入理解 Java 虚拟机 - 你了解 GC 算法原理吗

    来自:好好学Java 虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机- ...

  9. Jvm 系列(三):GC 算法 垃圾收集器

    这篇文件将给大家介绍GC都有哪几种算法,以及JVM都有那些垃圾回收器,它们的工作原理. 概述 垃圾收集 Garbage Collection 通常被称为"GC",它诞生于1960年 ...

最新文章

  1. python新手之一环境安装
  2. 2.3_模型和交叉检验
  3. html相对路径载入页面,html页面的绝对路径和相对路径
  4. 用cookie实现叶卡的记忆功能
  5. 计算机几何学论坛,现代几何学与计算机科学-中国计算机学会.pdf
  6. linux 喂狗时间,狗狗正确喂食时间表,喂狗最佳时间指南
  7. C++设计模式-桥接模式
  8. werkzeug routing.MapAdapter
  9. 08面向对象编程风格
  10. 简单的整人代码(你是猪,文章末附带文件)
  11. 最新MT2503_GPS调试工具资料下载
  12. 运行在网络处理器上的嵌入式Linux系统
  13. 量子计算机旋转硬币,量子行走漫谈
  14. 腾讯云短信服务的简单使用
  15. 金蝶专业版怎么反过账当月_金蝶KIS专业版没有反过账功能,怎么反过账
  16. android系统 vender添加自定义的预编译的应用程序
  17. 迅雷极速版 win10 奔溃、闪退,官方补丁无法安装解决办法
  18. 柔顺控制 - 技术发展综述
  19. excel取消保护(忘记密码)
  20. 微服务实战之春云与刀客(四)—— docker swarm 集群实战

热门文章

  1. Java多线程 模拟售票窗口售票
  2. Java 小数与百分数互相转换
  3. 网页设计常用颜色16进制代码
  4. 用PYTHON玩微信(wxpy)
  5. SupeSite6.0.1_X-Space4.0.1聚合dz7.2后,打开空间时报错:
  6. APP动态分析-Eclipse调试
  7. linux ip被限制网速,网速被限制了怎么_ 网速被限速了怎么办?-192路由网
  8. 2021上海益生产品(益生菌)展告知您吃益生菌多久才有效?
  9. 海外推广:常见的7个海外推广营销方式!
  10. html ip 黑名单,服务器ip黑名单查询