• Net CoreCLR 堆栈 GC 垃圾回收


     

    堆又叫进程堆,是对进程而言的,栈又叫线程栈,是对线程,,

    堆栈的资源是怎么分配的呢

    引用类型:引用类型分配在堆上面,实例化的时候会在堆上面开辟一块空间存储当前类型的实例,,就是说引用类型保存的是地址,指向一块内存
    引用类型分类:类{System.Object},自定义的类,字符串,接口,数组等
    
    
    值类型:值类型分配在栈上面 
    值类型分类:int ,long ,float,char,bool,enum,struct等
     

    垃圾回收(GC)

    垃圾回收是针对堆而言的
    静态资源不回收

    什么样的对象需要垃圾回收?

    托管资源和存在堆里的资源(值类型和引用类型)

    托管资源:一般指被CLR控制的内存资源,这些资源的管理可以有CLR控制,例如程序中分配的对象,作用域的变量,大部分对象都是托管资源。

    非托管资源:文件流,数据库连接等第三方资源,打印机,系统的窗口句柄都是非托管资源

    垃圾回收的流程

    1. 标记阶段
    2. 计划阶段
    3. 重定位阶段
    4. 清扫阶段
    5. 压缩阶段

    分代策略

    如图:垃圾回收过程

    第一次,遍历全部对象,找到没有引用过的,删除,剩下一代

    第二次,遍历0代对象,找到没有引用的,删除,剩下升级到1代,日过空间还是不够,开始遍历1代,同样,没有引用的删除

    如果还在被使用中,那么升级为2代,都不够才会检查2代

    这样依次循环过滤,最终随着一段时间的运行,持续回收,从上往下,都是2代-1代-0代,2代是稳定的,只扫描0代或1代效率高。

    什么时候才会GC

    1. 创建对象时会自动回收
    2. 操作系统报告内存不够时
    3. 还可以通过代码,GC.Collect()强制回收
    4. 程序退出(进程结束)
    5. 卸载AppDomain
  • 相关阅读:
    systemctl启动服务时,配置日志输出控制
    HTML5实现大文件分片上传示例
    HTML5实现大文件分片上传实例
    HTML5实现大文件分片上传代码
    HTML5实现大文件分片上传源代码
    HTML5实现大文件分片上传源码
    如何将word内容粘贴到富文本编辑器里面
    UEditor可以如何直接复制word的图文内容到编辑器中
    WORD 图片能粘到百度编辑器吗
    Word文档粘贴到DEDECMS
  • 原文地址:https://www.cnblogs.com/wangmaolin/p/13958154.html
Copyright © 2020-2023  润新知