CLR探索系列-GC Heap架构及其实现(垃圾回收系列)

在CLR探索系列的研究DotNet下的垃圾回收器这几个博文里,就先说说GC Heap结构吧,至于垃圾回收的详析算法实现,以后再写了。在一个托管进程被创建以后,在托管进程的内存空间里面,包含了System Domain,Shared Domain,Default Domain,以及一系列的Heap,有Process的Heap,JIT Code Heap,GC Heap以及LOH。在DotNet的CLR的实现中,GC heap和LOH(Large Object Heap)是包含在一个类里面实现的。这就造成了在内存中,一个GC Heap后面紧跟着的就是LOH Heap。在实现的时候,一个gc_heap类里面包含了一个GC的结构类,以及一个LOH。

一个GC Heap的结构大致如下:

上面是一个GC Heap的大致结构。从上面到下面是从低地址到高地址。有的时候,需要找一个需要的存在了很久的Object的时候,并不是往高地址去寻找,也有可能存在于低地址区域,这个和每个Generation的大小的动态改变有关。

说到这里,就会提到一个非常有趣的概念,“策略”。这个是GC开发小组的开发人员在研究呢很久性能和用户的操作以及内存管理之间的平衡只会整出来的一个比较有趣的概念。在垃圾回收的过程中加入了“策略”。譬如一个Generation 0代占有256KB的内存大小,如果在实际的程序的运行过程中发现新对象的创建特别频繁,那么GC EE就会自动增加这个Generation 0的大小。

在说明一个GC Heap的结构的时候,先用windbg+sos来看看一个用户态运行的程序的GC Heap里面都有些啥:

0:003> !eeheap=======================================
Number of GC Heaps: 1
generation 0 starts at 0x00ca1018
generation 1 starts at 0x00ca
100c
generation 2 starts at 0x00ca1000
ephemeral segment allocation context: none
segment  begin allocated   size00161e00 790d5588
790f
4b38 0x
0001f
5b0(128432)
00ca0000 00ca1000 00ca3ff4 0x00002ff4(12276)
Large object heap starts at 0x01ca1000segment  begin allocated   size
01ca0000 01ca1000 01ca3250 0x00002250(8784)
Total Size  0x
247f
4(149492)
------------------------------
GC Heap Size  0x
247f
4(149492)
=======================================

时间: 2024-10-05 16:42:26

CLR探索系列-GC Heap架构及其实现(垃圾回收系列)的相关文章

CLR探索系列-GC中的Card table和Brick Table(垃圾回收系列)

在CLR的垃圾回收子系统中,Card Table和Brick Table是两个比较有意思的表. 在GC的过程中,一个Heap在运行了一段时间以后,已经分配的空间就会越来越大.在进行了一次局部代或者是完全的垃圾回收以后,就会涉及到一个GC堆的类似碎片整理的概念.整理优化一次GC Heap.同时,这种机制保证了譬如一个IIS Server在长时间的运行过程中的稳定性并且优化了其内存管理. 这样的好处是显而易见的,但是采用这种解决方案带来的问题也很容易想到:譬如一个存在于GC Heap里面的"Smal

CLR探索系列-Server and Workstation Garbage Collection探索(垃圾回收系列)

CLR中的GC,存在着两种Mode.Server Mode的GC和Workstation Mode的GC.同时,在有些情况下,还会遇到并发的GC. Server GC只适合于在多CPU的主机上面使用.这种GC模式,为每一个处理器都独立的创建一个GC Heap,这样就可以进行并发的同步的收集.这样做的好处也是显而易见的:在相同的时间里面可以处理更多的用户请求.切实的带来性能的成倍提升.同时,这中模式相对于在多处理器下使用并发模式更加的有效. 而Workstation Mode GC,它适合于单处理

探索阿里巴巴如何打造共享服务中台的稳定性——走进《企业IT架构转型之道》系列3

前面两篇介绍了共享服务中台的业务价值以及建设原则,本篇内容将主要介绍当服务中台支撑越来越多业务场景后,在打造平台稳定性能力方面所探索出的一系列创新技术以及成果.整个稳定性体系包含的内容非常广,机房布线.网络通信.硬件部署.应用架构.数据容灾等都与稳定性相关,这里我们提到的稳定性主要指从共享服务中台的角度,实现了对中台应用架构以及平台自身的精细化管控以及保障,主要措施包括容量压测和评估.全链路压测.流量的限流和降级以及业务一致性平台. 容量压测和评估 想了解一个平台的容量,在传统的常规性能测试以及

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    (5):前台Jquery easyUI实现    (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSession线程内唯一     

Delphi XE程序设计系列 1-主从架构, 多层到JSON和REST

Delphi XE程序设计系列 1-主从架构, 多层到JSON和REST      从桌面开发,主从架构,一直到多层架构,虽然都是广泛被接受的观念和技术,但在信息技术的实作上却从不是开放, 相容的世界.Delphi从桌面开发到主从架构都是使用自己的数据传递格式以及通讯传递架构,到了多层架构虽然使用了Windows平台上的通讯协议,例 如COM/DCOM/COM+,但是在传递的数据格式方面仍然是使用自己的架构,COM/DCOM/COM+也是MS专属的通讯协议,和其它平台上使用的 通讯协议也不一样.

C#技术漫谈之垃圾回收机制(GC)

GC的前世与今生 虽然本文是以.net作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是GC的第一次出现.Lisp的程序员认为内存管理太重要了,所以不能由程序员自己来管理. 但后来的日子里Lisp却没有成气候,采用内存手动管理的语言占据了上风,以C为代表.出于同样的理由,不同的人却又不同的看法,C程序员认为内存管理太重要了,所以不能由系统来管理,并且讥笑Lisp程序慢如乌龟的运行速度.

从C#垃圾回收(GC)机制中挖掘性能优化方案

GC,Garbage Collect,中文意思就是垃圾回收,指的是系统中的内存的分配和回收管理.其对系统性能的影响是不可小觑的.今天就来说一下关于GC优化的东西,这里并不着重说概念和理论,主要说一些实用的东西.关于概念和理论这里只做简单说明,具体的大家可以看微软官方文档. 一.什么是GC                                                                                              GC如其名,就是垃圾收集

.net垃圾回收和CLR 4.0对垃圾回收所做的改进之三

A survey of garbage collection and the changes CLR 4.0 brings in Part 3 - series of what is new in CLR 4.0 接前篇Continue the previous posts .net垃圾回收和CLR 4.0对垃圾回收所做的改进之一 .net垃圾回收和CLR 4.0对垃圾回收所做的改进之二 弱引用Weak Reference 弱引用是相对强引用来说的.强引用指的是根有一个指针指向对象.弱引用是通过

.net垃圾回收和CLR 4.0对垃圾回收所做的改进之一

A survey of garbage collection and the changes CLR 4.0 brings in - series of what is new in CLR 4.0 导言Introduction   垃圾回收(Garbage Collection)在.net中是一个很重要的机制. 本文将要谈到CLR4.0对垃圾回收做了哪些改进. 为了更好地理解这些改进, 本文也要介绍垃圾回收的历史.  这样我们对整个垃圾回收有一个大的印象. 这个大印象对于我们掌握.net架构是