前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mono 3 的默认Gc是Sgen

Mono 3 的默认Gc是Sgen

作者头像
张善友
发布于 2018-01-22 07:19:11
发布于 2018-01-22 07:19:11
1.6K0
举报
文章被收录于专栏:张善友的专栏张善友的专栏

Mono 3现在是默认 GC是SGen 垃圾回收器,垃圾回收器几个性能和扩展性方面的改进,以更好地利用多核处理器硬件。SGen 已移植到 Windows 和 MIPS。

mono 最开始使用的是 Boehm-Demers-Wiser Conservative Garbage Collector ,mono 3.0之前的版本作为默认的垃圾收集器也是这个,Boehm垃圾收集器的主要问题在于无法精确读取寄存器与栈帧。因为无法确定给定值到底是指针还是标量,因此它总是假设给定值是指针,并且将相关联的对象标记为存活状态。这么做不仅会错误导致大块内存无法分配,同时还使得压缩可用空间这项工作变得异常艰难。

后来mono有了自己的 Simple Generational GC , 就是分代式垃圾回收器Sgen,取代了Mono中传统的 Boehm垃圾回收器。文档地址:http://www.mono-project.com/Compacting_GC,它使用精确的分代式(generational)垃圾收集器,类似于.NET版本的CLR。SGen垃圾收集器使用两生代而非.NET中的三个,但像.NET一样对于大对象使用独立的堆。

  1. 分为两代,之前使用 conservative gc..可见其文档的描述。是一种较为落后的实现,没有分代,.NET 的CLR是三代的
  2. 大对象特殊处理,默认大于64KB作为大对象,.NET的大对象是20KB以上,被分配到一个特殊的大对象堆中。该堆中的对象像其它小对象一样可以被finalized和释放。
  3. 小对象采用get_internal_mem/free_internal_mem 进行内存分配处理,大对象使用OS的malloc/free
  4. major collection 的时候采用 mark/sweep
  5. 收集进行时是 “stop the world”
  6. 保守扫描对象
  7. 老一代指向新一代的情况只有下面两种,所以都进行了跟踪:
  • 程序执行中,一个字段进行了赋值
  • 在复制(代移动)过程中,这个对象指向了一个新一代中的对象

Mono 3.2进一步提升了SGen GC,特别是针对下面的场景——

  • 流行对象负载,老一代对象非常欢迎的一些固定新生对象会导致创建很多记忆的集合。为了避免这种情况的发生,流行对象会被作为永恒对象直到下一次主收集。
  • 大规模线程栈负载,这种情况下需要合理地扫描大量大堆栈线程。这在以前通常会把大量压力放到规划阶段,因为它会产生非常大的固定队列。为了避免这种情况,SGen现在会在固定队列上使用哈希过滤,这大大降低了它们的平均大小,并且它会固定主要块而不是个别对象。

Mono 3.0添加了异步支持、改进的SGen垃圾收集器及其他特性

用Xwt构建跨平台应用程序

new Mono GC

SGen – Concurrent Mark

SGen – Concurrency and Evacuation 

Flame Graphs for Instruments 

How sgen rocks

SGen – The Write Barrier

SGen and DTrace

SGen – Finalization and Weak References

SGen – The Major Collectors

SGen

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-12-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
跨平台的 .NET 运行环境 Mono 3.2 新特性
Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新。 Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多的编译优化 默认使用 SGen Garbage Collector 垃圾收集器,提供3种新的实验模式:Low pause mode、Low promotion nursery、Mostly precise stack scanning; FullAOT编译器生成更优化的代码 Mono 3.2 基础类库可构建完整
张善友
2018/01/19
8270
跨平台的 .NET 运行环境 Mono 3.2 新特性
C#-垃圾回收机制(GC)
The garbage collector is a common language runtime component that controls the allocation and release of managed memory。
郑子铭
2023/08/29
2.4K0
C#-垃圾回收机制(GC)
GC垃圾收集器之美
Java最早做了垃圾回收机制,也就是我们说的GC,jvm通过垃圾回收机器,也随着jdk版本的迭代,不断的再进步。
Joseph_青椒
2023/08/05
5000
GC垃圾收集器之美
Java底层知识JVM、GC
答:Java虚拟机,最值的学习的两点,JVM内存结构模型以及GC。JVM是一个内存中的虚拟机,JVM的存储就是内存,例如类、常量、变量、方法都是在内存中。Java虚拟机是一种抽象化的虚拟机,在实际的计算机上仿真模拟各种计算机功能来实现,JVM有自己完善的硬件架构,如处理器,堆栈,寄存器等等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码即字节码,就可以在多种平台上不加修改的运行,一次编译到处运行。
别先生
2020/04/08
6370
Java底层知识JVM、GC
java(9)-深入浅出GC垃圾回收机制
1、本文了解GC垃圾回收机制,深入理解GC后才明白,为啥FGC会导致stop-the-world。 2、了解GC算法。
黄规速
2022/04/14
1K0
java(9)-深入浅出GC垃圾回收机制
JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比
谈垃圾回收器之前,要先讲讲垃圾回收算法,以及JVM对垃圾的认定策略,JVM垃圾回收器是垃圾回收算法的具体实现,了解了前面的前置知识,有利于对垃圾回收器的理解。
慕容千语
2021/03/03
6240
JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比
图解 Java 垃圾回收机制
自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。
用户1516716
2019/08/21
5430
图解 Java 垃圾回收机制
GC基本算法及C++GC机制
垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配的块,这些块也称为垃圾。在程序员看来,垃圾就是不再被引用的对象。自动回收垃圾的过程则称为垃圾收集(garbage collection)。在一个支持垃圾收集的语言中,程序显式地申请内存,但从不需要显式的释放它们。垃圾收集器会定期识别垃圾块,并将垃圾块放回空闲链表中。显然,C语言的malloc包不是一个带GC功能的分配器,程序员显式 调用malloc分配内存,也需要显式调用free释放它。而像java、C#这些语言等则提供了垃圾收集器。这篇文章的内容为介绍一些常用的GC算法,同时简单提一下C++的GC机制。
Tencent JCoder
2022/05/06
7870
GC基本算法及C++GC机制
GC
这篇文章主要概括的聊一聊GC,大概知道有哪些知识点或使用的时候需要注意什么。讲GC的文章一抓一大把,我就挑几个我个人比较有兴趣的地方分享一下。
JusterZhu
2023/09/18
2890
GC
Java垃圾回收的工作原理和最佳做法
Java垃圾回收是Java程序执行自动内存管理的过程。Java程序编译为字节码,可以在Java虚拟机(简称JVM)上运行。当Java程序在JVM上运行时,将在堆上创建对象,这是专用于该程序的内存的一部分。最终,将不再需要某些对象。垃圾收集器找到这些未使用的对象并将其删除以释放内存。
陈哈哈
2020/07/06
7970
Java垃圾回收的工作原理和最佳做法
Java垃圾回收机制
在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片。由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。
用户2909867
2018/08/22
1K0
C#之垃圾回收机制
GC(Garbage Collector)就是垃圾收集器,这里仅就内存而言。以应用程序的root为基础,遍历应用程序在Heap上动态分配的所有对象,通过识别它们是否被引用来确定哪些对象是已经死亡的、哪些仍需要被使用。已经不再被应用程序的root或者别的对象所引用的对象就是已经死亡的对象,即所谓的垃圾,需要被回收。这就是GC工作的原理。
zls365
2020/12/29
1.1K0
C#之垃圾回收机制
JVM GC 机制与性能优化
与C/C++相比,JAVA并不要求我们去人为编写代码进行内存回收和垃圾清理。JAVA提供了垃圾回收器(garbage collector)来自动检测对象的作用域),可自动把不再被使用的存储空间释放掉,也就是说,GC机制可以有效地防止内存泄露以及内存溢出。
Java廖志伟
2021/01/29
3900
G1垃圾回收器教程
garbage-first (G1)收集器是一个服务器风格的垃圾收集器,针对具有大内存的多处理器机器。它在同时实现高吞吐量的情况下,以很高的概率满足垃圾收集(GC)暂停(STW:stop the word)时间目标。G1垃圾收集器在Oracle JDK 7 update 4和更高版本中得到了完全支持。G1收集器专为以下应用程序设计:
伍六七AI编程
2022/11/14
6760
G1垃圾回收器教程
什么是.NET CLI CLR IL JIT GC,它们是如何工作的
NET 是 Microsoft 的用以创建 XML Web 服务(下一代软件)平台,该平台将信息、设备和人以一种统一的、个性化的方式联系起来。借助于 .NET 平台,可以创建和使用基于 XML 的应用程序、进程和 Web 站点以及服务,它们之间可以按设计、在任何平台或智能设备上共享和组合信息与功能,以向单位和个人提供定制好的解决方案。 .NET 是一个全面的产品家族,它建立在行业标准和 Internet 标准之上,提供开发(工具)、管理(服务器)、使用(构造块服务和智能客户端)以及 XML Web 服务体验(丰富的用户体验)。.NET 将成为您今天正在使用的 Microsoft 应用程序、工具和服务器的一部分,同时,新产品不断扩展 XML Web 的服务能力以满足您的所有业务需求。但是对于咱程序员来说这样理解它是否感觉太概念化了,估计也很难有人去记住这些概念。下面是我认为比较好的理解,也不知道说的可对?
潘成涛
2019/05/25
2K0
p7付费课程笔记5:串行gc以及并行gc
串行 GC 对年轻代使用 mark-copy (标记-复制) 算法,对老年代使用 mark-sweep-compact (标记-清除-整理) 算法。
你可以叫我老白
2023/07/26
2390
p7付费课程笔记5:串行gc以及并行gc
Java 14 Hotspot 虚拟机垃圾回收调优指南!
出处:www.cnblogs.com/sxpujs/p/12638114.html
Java技术栈
2020/06/16
6130
Java  14 Hotspot 虚拟机垃圾回收调优指南!
Java面试高频知识点汇总 垃圾回收(GC)机制专题
上图所示的eden区、s0区、s1区都属于新生代,tentired区属于老年代。大部分情况,对象都首先在eden区分配,在一次新生代垃圾回收之后,如果对象依然存活,则会进入s0或者s1,并且对象年龄还会加1(Eden区->Survivor区后对象的初始年龄变为1),当它的年龄增加到一定程度(默认为15岁),就会被晋升到老年代,这个阈值可以通过参数-XX:MaxTenuringThreshold来设置。
Steve Wang
2020/09/24
5600
Java虚拟机(JVM)面试题(2020最新版)
Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到的绝大部分知识。欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章持续更新中…
Java架构师必看
2020/04/10
3.2K0
JVM 垃圾回收机制(GC)总结
说起垃圾收集(Garbage Collection),大多数人都会想起Java,这项技术从始至终伴随着Java的成长,但事实上GC的出现要早于Java,它诞生于1960年MIT的使用动态分配和垃圾回收技术的语言Lisp。经过近60年的发展,目前内存的动态分配和内存回收技术已经非常成熟了,所有的垃圾回收已经自动化,经过迭代更新,自动回收也经过反复优化,效率和性能都非常可观。
beifengtz
2019/06/03
4.2K0
JVM 垃圾回收机制(GC)总结
相关推荐
跨平台的 .NET 运行环境 Mono 3.2 新特性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档