CLR探索系列

只有深究最本质的东西,才能把握最本质的东西。

有很多朋友都分析过System.Object作为Dotnet Framework里面的一个基类,她的特性、方法特点及其相关的概念,这篇博文里面,我就从System.Object这个基类的定义以及底层实现的角度,探索这个基类对象在内存里面的布局模型,探索这个基类最本质的面目。

首先,从一个Type的实例在内存里面的布局模型、以及一个实例的各个部分在一个托管进程结构里面对应安排到相应的哪个部分说起。

下面是一个简单的实例结构示意图以及逻辑结构图:

时间: 2024-10-30 16:57:42

CLR探索系列的相关文章

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)是包含在一个类里面实现的.这

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,它适合于单处理

PHP内核探索之变量(6)- 后续内核探索系列大纲备忘

原文:PHP内核探索之变量(6)- 后续内核探索系列大纲备忘 年前因为工作比较饱和,现在又忙着换工作的事情,基本停止了对博文的更新.后续的博文,还是慢慢补上吧. 为了不至于过于发散,先搞个未成形的大纲,如下: PHP内核探索之变量  不平凡的字符串 PHP内核探索之变量  变量的生命周期.类型转换 PHP内核探索之变量  变量的循环(foreach,其实放到Zend部分更加合理一些) PHP内核探索之SAPI  (比较疑惑,为什么这么靠后? ) PHP内核探索之函数  (函数实现原理.用户函数和

Spring Boot 探索系列 - 自动化配置篇

26. Logging Prev  Part IV. Spring Boot features  Next 26. Logging Spring Boot uses Commons Logging for all internal logging, but leaves the underlying log implementation open. Default configurations are provided for Java Util Logging,Log4J, Log4J2 an

Groovy:探索系列

Groovy探索之MOP 十六 使用Interceptor实现简单的观察家模式 Groovy探索之MOP 十五 方法名的动态性 Groovy探索之MOP 十四 对Java类使用Groovy语言的MOP Groovy探索之MOP 十三 Interceptor 三(2) Groovy探索之MOP 十三 Interceptor 三(1) Groovy探索之MOP 十二 方法的调用顺序 Groovy探索之MOP 十一 运行期内覆盖invokeMethod Groovy探索之MOP 十 Intercept

【插件式框架探索系列】应用程序域(AppDomain)

应用程序域(AppDomain)已经不是一个新名词了,只要熟悉.net的都知道它的存在,不过我们还是先一起来重新认识下应用程序域吧,究竟它是何方神圣. 应用程序域 众所周知,进程是代码执行和资源分配的最小单元,每个进程都拥有独立的内存单元,而进程之间又是相互隔离的,自然而然,进程成为了代码执行的安全边界. 一个进程对应一个应用程序是一个普遍的认知,而.net却打破了这一惯例,因为它带来了应用程序域这一全新的概念,CLR可使用应用程序域来提供应用程序之间的隔离,而一个进程中可以运行多个应用程序域,

【插件式框架探索系列】使用多UI线程提升性能

了解WPF线程模型的都知道,UI线程负责呈现和管理UI,而UI元素(派生自DispatcherObject)只能由创建该元素的线程来访问,这就导致了一些耗时的UI操作将影响到整个应用程序性能,未响应及漫长的等待有时会令人抓狂,而UI线程一度成为了不可越逾的鸿沟. 对于框架来说,一个插件的行为不应该影响到其它插件及整个平台的稳定性,后来在看了<Running WPF Application with Multiple UI Threads>和<DispatcherObject与WPF线程模

【插件式框架探索系列】建立基于委托的订阅发布机制

前些时候有个想法,想把自己感觉很有意思且方便平时开发的东西合起来,建立一个Framework,它会让开发变得更得心应手,可惜后来随着更多的东西被加入其中,越来越发觉这可能并不是一个开发者需要的东西,因为它太杂了,是的,作为一个Framework,还是单纯点的好,后来工作也忙了,就停滞了.这几天出差广州,夜来无事,便捡个模块来说道说道. Messenger 在平时的开发中,数据的传递.处理等可以通过事件机制来完成,但是事件机制会引入耦合,当然这种耦合很多时候是合理的,但是却有那么一些时候这种耦合却