c# CLR核心机制-垃圾回收

  1. GLR的背景
  2. c#进程堆,线程栈的,值类型和引用类型的区别
  3. 内存的分配和收集问题就产生了GC 
  4. 回收什么样的对象,回收流程,回收算法,和回收策略

 

 阅读指引:CLR核心机制就是垃圾回收, 讲到进程推和线程栈,是因为gc是针对于进程堆来回收,线程栈是用完全部回收的

 

    

 

  1. GLR的背景

CLR是.net fromwork   

core CLR是全新一套的core CLRE为了跨平台  核心都是去实现GC和JIT

 

 

 

 

 

2.c#进程堆,线程栈的,值类型和引用类型的区别

 

 

 

 

 

 

 

 

 从下面可以得出引用类型都是在堆里面的,为什么,因为线程栈,是线程随时可能被回收,如果引用类型放在栈里面,被回收了, 就等于一本字典没有索引页去找里面的内容

 

 

 

 值类型和引用类型的区别

for循环里面new对象和外面new对象的区别

如果一个对象实例被声明在循环内部,那么每次执行循环体时都会为对象重新分配内存并初始化对象实例。初始化(实例化)过程并不会占用过多的时间,但是内存分配会。在某种情况下,你可能无法跑到循环外部去创建对象实例。不过,如果可能的话,重置并重用对象应该是更好的选择。

 

 

 

 

3内存的分配和收集问题就产生了GC 

 

1.内存分配Allocator

 

 

 

 

2.内存收集Collector

 

非托管资源 如ado.net的链接,读写文件,为什么有的时候非托管资源没被包裹在using里面也会被释放,因为c#封装好了,但是如果遇到并发问题这里是会卡主的

 

 

 

4.回收什么样的对象,回收流程,回收算法,和回收策略

 

 

 

 

 

 

#对象越老,生成越长,相当于能逃过垃圾的追杀,那么久更容易逃过第二次

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4..net core  CLR变化

 

posted @ 2020-11-11 09:06  12不懂3  阅读(340)  评论(0编辑  收藏  举报
创作不易,请勿抄袭,欢迎转载!