CLR via C# 内存管理读书记
1. CLR 垃圾回收采用基于代的机制, 在一次垃圾回收中存活下来的对象被提升到另一代
2. 在确认对象是否垃圾时,从一组根开始,根包括静态字段,方法参数,局部变量等
3. 使用CriticalFinalizerObject类型确保终结
4. 避免使用Finalize方法
a. 对象要花更长的时间来分配,指向它们的指针必须放到终结列表
b. 可终结对象会提升到较老的代,会增大内存压力
c. 可终结的对象导致应用程序速试为变慢,因为每人对象回收时必须进行额外处理
5. 使用Dispose模式强制清理资源
6. 基于代的垃圾回收算法做以下假设:
a. 对象越新,生存期越短
b. 对象越老,生存期越长
c. 回收堆的一部分速度快于回收整个堆
7. 托管对象只使用少许内存,但引用大量非托管资源,可使用以下方法通知CLR以监视内存压力
GC.AddMemoryPressure(Int64 bytesAllocated)
GC.RemovePressure(int bytesAllocated)
System.Runtime.InteropServices.HandleCollector
8.使MemoryFailPoint类预先检查分配大内存是否成功
9. 垃圾回收模式(工作站,服务器)
10. 大对象(>=85K)从一个特殊的大对象堆中分配,默认为2代
编码注意事项:
1. 如果定义了静态集合字段,并在程序运行过程中不断往集合中添加对象,一样会导致内存和资源泄漏,
因为静态字态是垃圾收集的根,该集合对象始终可达,意味着对象始终不会被垃圾收集
2. 定义Finalize方法时,如果不小心把对象赋给可达对象,意味着对象及其引用的对象又复活了,也可能导致内存和资源泄漏
转载于:https://www.cnblogs.com/jjyjjyjjy/p/3185096.html
CLR via C# 内存管理读书记相关推荐
- 【转】C#的内存管理:堆栈、托管堆与指针
在32位的Windows操作系统中,每个进程都可以使用4GB的内存,这得益于虚拟寻址技术,在这4GB的内存中存储着可执行代码.代码加载的DLL和程序运行的所有变量,在C#中,虚拟内存中有个两个存储变量 ...
- 【转】.net框架读书笔记---CLR内存管理\垃圾收集(四)
弱引用 当一个根指向一个对象时,该对象不可能被垃圾收集器收集,在这种情况下,通常说存在一个该对象的强引用(strong reference).垃圾收集器还支持弱引用(weak reference)的概 ...
- 【转】.net框架读书笔记---CLR内存管理\垃圾收集(三)
接上一篇.net框架读书笔记---CLR内存管理\垃圾收集(二),主要学习了终止化对象(实现了Finalize方法的对象),了解了终止化对象的弊端,学习了通过实现IDisposable接口,通过Dis ...
- 【转】关于CLR内存管理一些深层次的讨论[下篇]
<上篇>中我们主要讨论的是程序集(Assembly)和应用程序域(AppDomain)的话题,着重介绍了两个不同的程序集加载方式--独占方式和共享方式(中立域方式):以及基于进程范围内的字 ...
- 读懂 JVM 内存管理这篇就够了
读懂 JVM 内存管理这篇就够了 JVM 的内存结构 程序计数器 作用 概述 PC寄存器的常见问题 虚拟机栈 栈中可能出现的异常 栈的存储单位 栈运行原理 栈帧的内部结构 局部变量表 槽 Slot 操 ...
- 一文读懂JVM虚拟机:JVM虚拟机的内存管理(万字详解)
JVM虚拟机的内存管理 文章目录 JVM虚拟机的内存管理 JVM与操作系统 Java虚拟机规范和 Java 语言规范的关系 java虚拟机的内存管理 JVM整体架构 一.PC 程序计数器 二.虚拟机栈 ...
- .NET中的内存管理,GC机制,内存释放过程
引言:作为一个.NET程序员,我们知道托管代码的内存管理是自动的..NET可以保证我们的托管程序在结束时全部释放,这为我们编程人员省去了不少麻烦,我们可以连想都不想怎么去管理内存,反正.NET自己会保 ...
- linux-glibc内存管理小结2(内存相关系统调用的实现)
在上一节ptmalloc源码分析中我们提到dlmalloc向系统申请内存的方式有两种, 对应Linux系统下分别是sbrk()与mmap()系统调用. 本节我们就来看下brk()/sbrk()与mma ...
- Linux堆内存管理深入分析(上)
Linux堆内存管理深入分析 (上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏 ...
最新文章
- UA MATH571A 多元线性回归I 模型设定与推断
- 网络管理:3分钟排障秘技,一招胜过十年功 | 文末有彩蛋
- 给书配代码-电力经济调度(3):计及网络安全约束的经济调度模型
- boost::function_types::is_callable_builtin用法的测试程序
- Benny:只处理那些NVARCHAR字段,并且NTEXT也是小于4000个字符时的情况.不管类型.只管长度....
- android跨进程事件注入(程序模拟用户输入)
- php实现直播答题系统,直播答题解决方案
- xor和路径(codevs 2412)
- Professional C# 6 and .NET Core 1.0 - Chapter 43 WebHooks and SignalR
- 袁永福的博客系列文章链接集合
- 【Sublime Text3 】——代码片段
- 炸裂!跑P站上教微积分,年入170w...
- IDEA初始jsp模板和修改jsp模板
- 计算机word表格加法公式,如何插入公式以求和Word中表格的一列或一行?
- 使用 JMeter的性能测试
- 虚拟信用卡免费申请(工行E卡充值entropay虚拟信用卡)
- 解决Echarts使用tab切换时只显示第一个tab中图表,其他tab中图表不显示或显示不全问题
- RxJava-Introduction
- 洛谷-P1885-Moo-普及--分治
- html中设置网站全局颜色为黑白