博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 5 6 7 8 9 10 11 12 13 14 下一页

2012年3月13日

摘要: 微软声称.NET是一种革命性的编程技术。许多要素使它成为大多数开发人员的首选。本文我们将要讨论一下.NET Framework中一个很主要的优势——内存和资源管理的便捷性。关于垃圾回收器 每个程序都会使用一定次序的资源,或内存缓冲区,或网络连接,或数据库资源等等。实际上,在面向对象环境中,每种类型都被看作是程序的某些有效资源。为了使用这些资源,必须分配部分内存来描述这种类型。 资源访问按一下步骤进行:1. 为类型分配内存来描述资源。2. 初始化资源,把资源设置成初始化状态,使资源可用。3. 通过访问类型实例的成员来使用资源(按需求重复)。4. 销毁资源状态以清除资源。5. 释放内存。.NET中 阅读全文

posted @ 2012-03-13 10:01 qianyz 阅读(272) 评论(0) 推荐(0) 编辑

摘要: 上一篇文章介绍了.Net 垃圾回收的基本原理和垃圾回收执行Finalize方法的内部机制;这一篇我们看下弱引用对象,代,多线程垃圾回收,大对象处理以及和垃圾回收相关的性能计数器。让我们从弱引用对象说起,弱引用对象可以减轻大对象带来的内存压力。弱引用(Weak References)当程序的根对象指向一个对象时,这个对象是可达的,垃圾回收器不能回收它,这称为对对象的强引用。和强引用相对的是弱引用,当一个对象上存在弱引用时,垃圾回收器可以回收此对象,但是也允许程序访问这个对象。这是怎么回事儿呢?请往下看。如果一个对象上仅存在弱引用,并且垃圾回收器在运行,这个对象就会被回收,之后如果程序中要访问这个 阅读全文

posted @ 2012-03-13 09:54 qianyz 阅读(289) 评论(0) 推荐(0) 编辑

摘要: 【译】.Net 垃圾回收机制原理(一)转载:yukaizhao有了Microsoft.Net clr中的垃圾回收机制程序员不需要再关注什么时候释放内存,释放内存这件事儿完全由GC做了,对程序员来说是透明的。尽管如此,作为一个.Net程序员很有必要理解垃圾回收是如何工作的。这篇文章我们就来看下.Net是如何分配和管理托管内存的,之后再一步一步描述垃圾回收器工作的算法机制。为程序设计一个适当的内存管理策略是困难的也是乏味的,这个工作还会影响你专注于解决程序本身要解决的问题。有没有一种内置的方法可以帮助开发人员解决内存管理的问题呢?当然有了,在.Net中就是GC,垃圾回收。让我们想一下,每一个程序都 阅读全文

posted @ 2012-03-13 09:52 qianyz 阅读(194) 评论(0) 推荐(0) 编辑

2011年11月14日

摘要: We were unable to locate this content in zh-cn.Here is the same content in en-us.JIT and RunDrill Into .NET Framework Internals to See How the CLR Creates Runtime ObjectsHanu KommalapatiandTom ChristianThis article discusses:SystemDomain, SharedDomain, and DefaultDomainObject layout and other memory 阅读全文

posted @ 2011-11-14 11:34 qianyz 阅读(363) 评论(0) 推荐(0) 编辑

摘要: •SystemDomain, SharedDomain, and DefaultDomain•对象布局和内存细节。•方法表布局。•方法分派(Method dispatching)。本文使用下列技术:.NET Framework, C#本页内容CLR启动程序(Bootstrap)创建的域系统域(System Domain)共享域(Shared Domain)默认域(Default Domain)加载器堆(Loader Heaps)类型原理对象实例方法表基实例大小方法槽表(Method Slot Table)方法描述(MethodDesc)接口虚表图和接口图虚分派(Virtual Dispatch 阅读全文

posted @ 2011-11-14 11:32 qianyz 阅读(499) 评论(0) 推荐(0) 编辑

2011年11月6日

摘要: 有很多朋友都分析过System.Object作为Dotnet Framework里面的一个基类,她的特性、方法特点及其相关的概念,这篇博文里面,我就从System.Object这个基类的定义以及底层实现的角度,探索这个基类对象在内存里面的布局模型,探索这个基类最本质的面目。首先,从一个Type的实例在内存里面的布局模型、以及一个实例的各个部分在一个托管进程结构里面对应安排到相应的哪个部分说起。下面是一个简单的实例结构示意图以及逻辑结构图:通常所说的对一个Object的引用,实际上这个Object的Ref是指向GC Heap或者是Thread的Heap里面的这个实例的Object Header这 阅读全文

posted @ 2011-11-06 21:51 qianyz 阅读(335) 评论(0) 推荐(0) 编辑

2011年11月4日

摘要: 一 多态的例子 class Program { static void Main(string[] args) { Cpu c1 = new Cpu(); c1.fun(); Cpu c2 = new IntelCpu(); c2.fun(); Cpu c3_1 = new NewCpu(); c3 阅读全文

posted @ 2011-11-04 02:39 qianyz 阅读(357) 评论(0) 推荐(0) 编辑

摘要: 一 调用方法的IL指令 我们知道在.NET中一共有三种方法:实例方法,静态方法和虚方法。当程序被编译成IL代码时,我们可以看到有两个调用方法的IL指令,分别是call和callvirt。我们首先看下下面的列子: class Cpu { public Cpu() { Console.WriteLine 阅读全文

posted @ 2011-11-04 02:38 qianyz 阅读(449) 评论(0) 推荐(0) 编辑

摘要: 封装、继承、多态是面向对象的最重要的3个特点。但是想真的弄明白他们其中的奥秘还是的费一番功夫。记得在学校学习C++的时候,讲到这个地方,自己早已是一头雾水,当时还在想,弄成private做什么,多麻烦啊。到了多态,继承更是昏死了。今天就来深入了解下其中的奥秘吧。本文主要是从内存结构出发来讲解.NET中的继承和多态,因为内存布局的不同所以和其他语言中的继承多态可能有一定区别。一 笔试题目class Program { static void Main(string[] args) { Cpu c1 = new Cpu(); c1.fun(); Cpu c2 = new IntelCpu(); c 阅读全文

posted @ 2011-11-04 02:37 qianyz 阅读(277) 评论(0) 推荐(0) 编辑

2011年11月3日

摘要: Object内存核心结构及实现完全剖析(MethodTable、EEClass与MethodDescChunk)无疑,一个Object在CLR中的逻辑结构是相当复杂的。前段时间,写了一篇CLR探索系列:System.Object内存布局模型及实现研究,侧重从System.Object这个基本类的基本内存布局,实现和结构来研究了下。这是远远不够的。今天就从如何存储一个Object中的Field,Method等信息,这些信息的逻辑组织方式和存储的逻辑结构。废话不多说,看看就知道了:首先,给一个图: 这个图,显示了一个Object的MethodTable,EEClass和MethodDescChun 阅读全文

posted @ 2011-11-03 16:36 qianyz 阅读(271) 评论(0) 推荐(0) 编辑

上一页 1 ··· 5 6 7 8 9 10 11 12 13 14 下一页