.NetCore中GC垃圾收集的策略
垃圾一共分三级,0到2,大小依次递增并且生命周期也依次递增
一般第0代的对象都是较小的对象,第2代的对象都是较大的对象,第0代对象GC收集时间最短(毫秒级别),第2代的对象GC收集时间最长。当程序需要内存时(或者程序空闲的时),GC会先收集第0代的对象,然后收集第1代,第2代对象。
如果GC跑过了,内存空间依然不够用,那么就抛出了OutOfMemoryException异常。
GC跑过几次之后,第0代的对象仍然存在,那么CLR会把这些对象移动到第1代,依照生命周期的长短甚至再移动到第三代。
由于GC只能释放托管资源,不能释放非托管资源(数据库链接、文件流、甚至开发的非面向CLR的C++库等)这些都需要手动调用dispose函数或者自己去管理内存
链接 : https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals
链接 : http://gad.qq.com/article/detail/287226
链接 : https://stackoverflow.com/questions/13082664/when-clr-calls-garbage-collector-in-net
链接 : https://blog.csdn.net/pan869823184/article/details/19299581