.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上。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号