Dot net GC
一、简介
GC是Dotnet 内存管理的机制,GC负责内存的分配和回收。
二、GC概念
在以往,程序员都需要自己分配、释放资源。很多程序上的错误都因为内存没有释放导致。Dotnet的GC(垃圾收集)机制就让程序员从内存管理的繁琐工作中解放出来,从而专注于业务逻辑的开发。
三、实现
1)内存分配
所有引用类型都从堆中分配。堆可以看做一块连续的内存块。
2)内存回收
当程序请求分配内存时,GC会去堆查看是否还有足够的内存分配;如果不够,则进行内存回收。首先,它会遍历所有的根(全局、静态变量指针,堆栈中局部遍历指针,CPU存储器等)查找出在堆中所有还在被使用的对象,建立一张图。接着,压缩内存,把分散的、还在使用的内存合并移动要一块连续的内存块中,修正根的引用,重指向移动后的内存块。接着,对已分配、已没被使用的内存进行回收。
reference:http://www.cnblogs.com/tylerdurdon/archive/2008/12/17/1356853.html
EG:
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相关推荐
- 武器系统中的自主性(国防部指令3000.09)
批准: 负责政策的国防部副部长办公室 2023年1月25日 可以公开发布.可在指令司网站https://www.esd.whs.mil/DD/查阅. 国防部指令3000.09,"武器系统中的 ...
- k8s gc原理详解
1. K8s 的垃圾回收策略 2 gc 源码分析 2.1 初始化 garbageCollector 对象 2.1.1 garbageCollector包含的结构体对象 2.1.2 NewGarbage ...
- gc方法写法_云风的 BLOG
December 17, 2020 内存的惰性初始化 这两天和同事讨论一个问题,我写了个小玩意. 事情起因是,我们公司上海的工作室的一个 MMO 项目做服务器压力测试.谈及优化,涉及到服务器中使用的 ...
- 基于GC - MS的代谢组学研究揭示:SD大鼠和Wistar大鼠之间存在系统的代谢差异及乙醇灌胃反应差异
Author: Xianfu Gao,Aihua Zhao,Mingmei Zhou,Jingchao Lin,Yunping Qiu,Mingming Su,Wei Jia 写在前面: 大鼠被誉为精 ...
- 常用的Java GC算法
1) 复制算法 复制算法讲内存分为相等的两份,当一块用完了,就将还存活的对象复制到另外一块,然后清楚这块内容.特点:速度快.浪费资源.一般新生代使用此法. 2) 标记整理算法 一般适用于老年代,将活跃 ...
- java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得
该文章出自:http://www.cnblogs.com/hucn/p/3572384.html 分析工具:http://www.blogjava.net/jjshcc/archive/2014/03 ...
- 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) ...
- Java GC 日志详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt105 java GC日志可以通过 +PrintGCDetails开启 以Pa ...
- 32位jdk最大内存_你了解Java 内存区域和GC机制吗?
目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...
- java服务器gc停顿_如何避免后台IO高负载造成的长时间JVM GC停顿(转)
译者著:其实本文的中心意思非常简单,没有耐心的读者建议直接拉到最后看结论部分,有兴趣的读者可以详细阅读一下. 原文发表于Linkedin Engineering,作者 Zhenyun Zhuang是L ...
最新文章
- 金融行业数据管理将何去何从?
- python ‘%r‘或者‘{!r}‘的意思
- cute editor详细设置
- sv队列和动态数组的区别_Go 刷 LeetCode 系列:经典(7) 设计双端队列
- Flutter Container 容器以及对齐方式 Alignment
- “蚂蚁牙黑”太火,想玩就用ModelArts做一个!
- 【学习 OpenCV】—— Mat setTo/convertTo/copyTo
- 大型网站架构系列:20本技术书籍推荐
- nginx:工作原理
- 计算机应用中存在性证明的代数拓扑方法(附顾险峰教授简历,公号回复“代数拓扑”、“顾险峰”可下载PDF资料,欢迎赞赏转发支持社区)
- df 根据文件名找到挂载点原理
- java xlsm_poi读取excel(xls和xlsx,xlsm)给定单元格内容
- 数据可视化之农作物产量,主要农产品总产量是多少?
- python 回溯算法总结
- html5中hr是什么意思,【hr是什么意思】hr的意思_hr指的是什么_亲亲宝贝网
- C语言_求1到某个数之间的所有素数
- 集成Opencascade+Gmsh+OSG的CAD测试程序
- ndk开发教程,Android工程师面试该怎么准备?真香!
- 英国通信公司XOR推出3000英镑起硬件加密手机
- 日期操作比较全面得代码