一、简介

GC是Dotnet 内存管理的机制,GC负责内存的分配和回收。

二、GC概念

在以往,程序员都需要自己分配、释放资源。很多程序上的错误都因为内存没有释放导致。Dotnet的GC(垃圾收集)机制就让程序员从内存管理的繁琐工作中解放出来,从而专注于业务逻辑的开发。

三、实现

1)内存分配

所有引用类型都从堆中分配。堆可以看做一块连续的内存块。

2)内存回收

当程序请求分配内存时,GC会去堆查看是否还有足够的内存分配;如果不够,则进行内存回收。首先,它会遍历所有的根(全局、静态变量指针,堆栈中局部遍历指针,CPU存储器等)查找出在堆中所有还在被使用的对象,建立一张图。接着,压缩内存,把分散的、还在使用的内存合并移动要一块连续的内存块中,修正根的引用,重指向移动后的内存块。接着,对已分配、已没被使用的内存进行回收。

reference:http://www.cnblogs.com/tylerdurdon/archive/2008/12/17/1356853.html

EG:

Code
using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
            // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            // Determine the best available approximation of the number 
            // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of generation 0 only.
            GC.Collect(0);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of all generations up to and including 2.
            GC.Collect(2);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for (int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
                // with unused objects.
                vt = new Version();
            }
        }
    }
}

转载于:https://www.cnblogs.com/xl696128/archive/2008/12/31/1366135.html

Dot net GC相关推荐

  1. 武器系统中的自主性(国防部指令3000.09)

    批准: 负责政策的国防部副部长办公室 2023年1月25日 可以公开发布.可在指令司网站https://www.esd.whs.mil/DD/查阅. 国防部指令3000.09,"武器系统中的 ...

  2. k8s gc原理详解

    1. K8s 的垃圾回收策略 2 gc 源码分析 2.1 初始化 garbageCollector 对象 2.1.1 garbageCollector包含的结构体对象 2.1.2 NewGarbage ...

  3. gc方法写法_云风的 BLOG

    December 17, 2020 内存的惰性初始化 这两天和同事讨论一个问题,我写了个小玩意. 事情起因是,我们公司上海的工作室的一个 MMO 项目做服务器压力测试.谈及优化,涉及到服务器中使用的 ...

  4. 基于GC - MS的代谢组学研究揭示:SD大鼠和Wistar大鼠之间存在系统的代谢差异及乙醇灌胃反应差异

    Author: Xianfu Gao,Aihua Zhao,Mingmei Zhou,Jingchao Lin,Yunping Qiu,Mingming Su,Wei Jia 写在前面: 大鼠被誉为精 ...

  5. 常用的Java GC算法

    1) 复制算法 复制算法讲内存分为相等的两份,当一块用完了,就将还存活的对象复制到另外一块,然后清楚这块内容.特点:速度快.浪费资源.一般新生代使用此法. 2) 标记整理算法 一般适用于老年代,将活跃 ...

  6. java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得

    该文章出自:http://www.cnblogs.com/hucn/p/3572384.html 分析工具:http://www.blogjava.net/jjshcc/archive/2014/03 ...

  7. PyTorch 笔记(09)— Tensor 线性代数计算(torch.trace、torch.diag、torch.mm、torch.dot、torch.inverse逆矩阵、转置)

    1. 常用函数 常用线性表函数如下表所示: 2. 使用示例 2.1 torch.trace In [22]: import torch as tIn [23]: a = t.arange(1, 10) ...

  8. Java GC 日志详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt105 java GC日志可以通过 +PrintGCDetails开启 以Pa ...

  9. 32位jdk最大内存_你了解Java 内存区域和GC机制吗?

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  10. java服务器gc停顿_如何避免后台IO高负载造成的长时间JVM GC停顿(转)

    译者著:其实本文的中心意思非常简单,没有耐心的读者建议直接拉到最后看结论部分,有兴趣的读者可以详细阅读一下. 原文发表于Linkedin Engineering,作者 Zhenyun Zhuang是L ...

最新文章

  1. 金融行业数据管理将何去何从?
  2. python ‘%r‘或者‘{!r}‘的意思
  3. cute editor详细设置
  4. sv队列和动态数组的区别_Go 刷 LeetCode 系列:经典(7) 设计双端队列
  5. Flutter Container 容器以及对齐方式 Alignment
  6. “蚂蚁牙黑”太火,想玩就用ModelArts做一个!
  7. 【学习 OpenCV】—— Mat setTo/convertTo/copyTo
  8. 大型网站架构系列:20本技术书籍推荐
  9. nginx:工作原理
  10. 计算机应用中存在性证明的代数拓扑方法(附顾险峰教授简历,公号回复“代数拓扑”、“顾险峰”可下载PDF资料,欢迎赞赏转发支持社区)
  11. df 根据文件名找到挂载点原理
  12. java xlsm_poi读取excel(xls和xlsx,xlsm)给定单元格内容
  13. 数据可视化之农作物产量,主要农产品总产量是多少?
  14. python 回溯算法总结
  15. html5中hr是什么意思,【hr是什么意思】hr的意思_hr指的是什么_亲亲宝贝网
  16. C语言_求1到某个数之间的所有素数
  17. 集成Opencascade+Gmsh+OSG的CAD测试程序
  18. ndk开发教程,Android工程师面试该怎么准备?真香!
  19. 英国通信公司XOR推出3000英镑起硬件加密手机
  20. 日期操作比较全面得代码

热门文章

  1. POJ 3264 -----RMQ问题
  2. jsjquery避免报错的方法
  3. redhat6 忘记密码怎么办
  4. beanstalkd最佳实践-编程开发
  5. Proxy.newProxyInstance处引起 java.lang.ClassCastException 问题的解决方法
  6. 把txt作为数据源绑定到GridView中
  7. 提前祝各位:圣诞节快乐~
  8. [Struts]让Dreamweaver显示Struts标签的插件
  9. Java Bean 与Spring Bean 的区别
  10. 面试官:说说 Spring 事务设计原理?面试必问!