什么是托管资源,什么是非托管资源
托管资源
由公共语言运行时(CRL)控制的内存资源,系统可以自行分配和回收的资源;例如程序中分配的对象,作用域内的变量等
非托管资源
是CLR不能控制或者管理的部分,例如文件读取,数据库连接,窗口句柄,图标,打印机资源等,必须在调用或使用后,通过 Finalize或Dispose 手动释放.文件读取和数据库连接需要调用Close()方法关闭并释放资源.
注意,不能在析构函数中释放托管资源,因为析构函数是有垃圾回收器调用的,可能在析构函数调用之前,类包含的托管资源已经被回收了,从而导致无法预知的结果。
GC垃圾回收器
当系统内存资源匮乏时,它就会被激发,然后自动的去释放那些没有被使用的托管资源。
工作原理
遍历托管堆中的对象,标记被使用对象(没被使用的就是所谓的垃圾),然后把可达对象转移到一个连续的地址空间(也叫压缩),其余的所有没用的对象内存被回收掉。
GC进行垃圾回收时的主要流程是?
(1)标记 ,找到并创建所有活动对象的列表。
(2)重定位 ,用于更新对将要压缩的对象的引用。
(3)压缩 ,用于回收由死对象占用的空间,并压缩幸存的对象。 压缩阶段将垃圾回收中幸存下来的对象移至段中时间较早的一端。
GC在哪些情况下回进行回收工作?
(1)系统具有低的物理内存。 这是通过 OS 的内存不足通知或主机指示的内存不足检测出来。
(2)由托管堆上已分配的对象使用的内存超出了可接受的阈值。 随着进程的运行,此阈值会不断地进行调整。
(3)调用 GC.Collect 方法。 几乎在所有情况下,你都不必调用此方法,因为垃圾回收器会持续运行。 此方法主要用于特殊情况和测试。
什么是托管资源,什么是非托管资源相关推荐
- 什么是托管,什么是非托管
NET Framework 是一种新的计算平台,它简化了在高度分布式 Internet 环境中的应用程 序开发..NET Framework 旨在实现下列目标: 提供一个一致的面向对象的编程环境,而无 ...
- C# 托管资源和非托管资源
原文地址:http://blog.csdn.net/zlwzlwzlw/article/details/7918633 托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源.托 ...
- C# 托管资源和非托管资源(Dispose、析构函数)
https://www.cnblogs.com/herenzhiming/articles/9691524.html 资源分类: 托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内 ...
- 托管资源和非托管资源
在.net 编程环境中,系统的资源分为托管资源和非托管资源. 对于托管的资源的回收工作,是不需要人工干预回收的,而且你也无法干预他们的回收,所能够做的只是了解.net CLR如何做这些操作.也就是说对 ...
- 团队协作新趋势:语雀——助力更多:个人、企业、博客、协作、托管、画布设计、资源托管(立体化趋势)
团队协作 · 业务模式 · 新趋势: 语雀:个人.企业.博客.协作.托管.画布设计.资源托管(立体化趋势) 博主自留地,请勿瞎踩 官方文档: 语雀官方入口:https://www.yuque.com/ ...
- C# 托管资源与非托管资源
C# 托管资源与非托管资源 在.net 编程环境中,系统的资源分为托管资源和非托管资源. 托管资源: Net平台中,CLR为程序员提供了一种很好的内存管理机制,使得程序员在编写代码时不要显式的去释放自 ...
- 编写高质量代码改善C#程序的157个建议——建议50:在Dispose模式中应区别对待托管资源和非托管资源...
建议50:在Dispose模式中应区别对待托管资源和非托管资源 真正资源释放代码的那个虚方法是带一个bool参数的,带这个参数,是因为我们在资源释放时要区别对待托管资源和非托管资源. 提供给调用者调用 ...
- .NET中的托管资源与非托管资源
托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源.托管资源的回收工作是不需要人工干预的,有.NET运行库在合适调用垃圾回收器进行回收. 非托管资源指的是.NET不知道如何回 ...
- C#Maeshal类——托管资源和非托管资源转换
C#--Marshal.StructureToPtr方法简介 http://blog.csdn.net/livelylittlefish/article/details/2423764 ...
- 自建私有云与公有云托管对比_共享托管和云托管的比较以及如何选择
自建私有云与公有云托管对比 Do you keep hearing about cloud hosting and wonder how it differs from a regular hosti ...
最新文章
- 智能车竞赛技术报告 | 全向行进组 - 沈阳工业大学 - 找不到北队
- ASP.NET页面传值的几种方式
- (原創) array可以使用reference方式傳進function嗎? (C/C++)
- 网页爬虫python代码_Python 爬虫web网页版程序代码
- Linux内核spin_lock与spin_lock_irq分析
- Qt动画框架Animation Framework
- Kafka学习笔记-Java简单操作
- libevent简介和使用
- Android service 中的stub类
- java 命令行读取_Java:从控制台(console,命令行)读取字符 | 学步园
- yii2通过url访问类中的方法_行为型设计模式 访问者模式
- 上海java 开发培训_上海十大java培训
- 14. Nginx 服务器架构
- c语言结构体stamp是什么意思,stamp是什么意思
- mac m1 eclispe安装暗黑主题
- 动词变名词的变化规则_动词变名词的变化规则例子
- 代码大全(第2版)_2021【公式大全3.0版】【(数一)第371页】【(数二)第283页】【(数三)第324页】【有关矩阵秩的重要结论】6)~...
- Locust学习笔记5——登录接口参数关联
- Idear常用快捷键
- python:水果与设计模式-原型模式
热门文章
- MySQL复习笔记【上】
- CTF训练-牛刀小试-聪明的小羊
- IPhone 手机屏幕 不显示了。 只有一个背景界面。其他都不显示。怎么回事。
- 国庆第七日(2014年10月7日17:55:56),随手记,一些关注的OSC软件,花生壳
- Selenium原理介绍
- c语言二的n次方,c语言练习之路(二阶方阵的n次方)
- 前端初学之利用html,css,js实现车牌摇号程序(一)
- excel中如何输入数组公式详细介绍
- angular+ng-zorro后台搜索页面
- java计算机毕业设计web智慧医疗平台设计与实现MyBatis+系统+LW文档+源码+调试部署