.Net虚拟机CLR核心的内存模型

前言

CLR里面内存模型众多,这里个人认为有个极其重要的内存模型组成的链式结构。本篇来看下。.

概括

1.成员
这个内存模型的链式成员结构有如下:
一:MethodTable
二:EEClass
三:PreCode
四:MethodDescChunk
五:MethodDesc

2.内存模型示意图
以上五个结构,组成的内存模型示意图大致如下所示,它基本上包含了CLR里面用到的必须场景。当然,还有一些稀奇古怪的功能,这里并没有过多展示。
.Net虚拟机CLR核心的内存模型

3.解释
一:MethodTable:对象的在CLR里面的实际类型表示,有的书上按照它的名字叫做方法表,但是实际上体现不出来它的功能。
二:EEClass:类型或者对象的私有数据
三:PreCode:前置码,一般的存放的是表示方法被编译之前的跳转或者需要经过的地址
四:MethodDescChunk:它存放在MethodDesc之前,表示它之后有几个MethodDesc。
五:MethodDesc:这个极其重要,表示的是函数方法的结构体。函数是否被编译,在内存里面的存放位置,以及函数对于GC的影响。JIT编译的时候需要编译的哪个函数,都是MethodDesc来做。

4:其它
除了以上之外,还有一些其它的内存表示。后面可能会赘述。