.net 的内存分配

1.是在栈还是在堆

    所有引用类型都在堆上比如 Class sting List 等那值类型呢?

2. 值类型的分配分2种情况

2.1 类中的值类型字段

   此时虽然是值类型,但它是属于类的实例,所以和类的实例一起被配分在堆上

2.2 方法中的值临时变量,方法的值类型参数

   此时的值类型被分配在线程栈上。

3. 值类型的装箱和拆箱的内存模型

    装箱 int a = 5 首先在栈中压入5

    object b = a  在堆中放入5 并生成一个引用地址b放入栈

  拆箱 int c = (int)b 从堆中复制5 赋值给c 并放入栈中

4. GC的释放规则

    三色并发标记 (1.5之后使用GC方法)

    分为0代 1代 2代 

    0代的扫描后没有释放的会被放入1代 

    1代的扫描后没有释放的会被放入2代 

   0代的扫描次数 > 1代的扫描次数 > 2代的扫描次数

CLR载入内存之后,会初始化两个托管堆,一个大对象堆(LOH –large object heap)和一个小对象对(SOH – small object heap)。

内存分配请求就是将托管对象放到对应的托管堆上。如果对象的大小小于85000byte,它会被放置在SOH;否则会被放在LOH上。

  

 

    

    

   

    

 

posted @ 2020-11-16 11:18  wujh123  阅读(163)  评论(0)    收藏  举报