在聊.Net 对象生命周期之前首先说说内存:
内存是对象赖以生存的介质,内存是由大量的晶体管组成的,每个晶体管代表一个位(bit),一个位只有两个值:0或1;一般内存大小最小单位是一个字节,单位是比特(Byte),一个Byte是由8个位组成的:1 Byte=8 bit;那一个字节的大小最小值是8个0(二进制),最大值是8个1(二进制),对应十进制大小是0到255
如下图16*8的矩阵模拟可以想象成一个内存条,每一个方格代表一个晶体管;总共有128个晶体管即128个位,每8个位一个字节就是16个字节,大小就是16Byte;
那一个8G的内存条有多少个晶体管:
8GB=8*1024 MB=8*1024*1024 KB=8*1024*1024*1024B=8*1024*1024*1024*8 bit
算下来大概有687亿个晶体管组成
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
接下来我们说说对象:
客观世界是由各种对象组成的,任何事物都是对象,每一个对象都有自己的运动规律和内部状态,复杂的对象可由简单的各种对象以各种方式构成,对象的组合及相互作用就构成了系统,在计算机系统中一个对象可由三部分组成:对象名、属性和方法。
通常情况下计算机高级语言用类去表示对象,一个类的实例表示一个对象:
创建一个Person类
public class Person{
}
创建一个Person类实例即一个对象
Person person=new Person()
当运行程序执行以上这一段代码时 ,就产生了一个person对象,刚开始就提到内存是对象赖以生存的介质,对象从生成到消亡都是由CLR(Common Language Runtime)来管理的,CLR会计算出对象的所需要的内存大小,并且分配一定的内存区域给这个对象,这个对象何时消亡,CLR有自己的垃圾回收机制(GC)来处理,当这个对象消亡后,CLR就会收回它的内存
再看看第一张图第三排理解成一个2个字节大小(8个比特位)的对象在存活时内存中的样子:
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
在接下来的章节里会详细说说.Net 对象产生的详细过程,对象的内存大小是如何计算的,以及CLR是如何管理对象的内存的