翔如菲菲

其实天很蓝,阴云总会散;其实海不宽,此岸连彼岸.

导航

上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 30 下一页

2011年2月25日 #

【转】垃圾回收系列(3):CLR与JVM垃圾回收器的比较

摘要: 本文为垃圾回收讲座的第三篇,在前面两篇(一、二)文章里介绍了手工管理内存带来的一些问题,以及一些经典的GC算法。本文我们主要关注微软的CLR与JVM垃圾回收器方面的比较。我们知道CLR和JVM都采用了分代式垃圾回收器,而分代式垃圾回收器则基于以下几点假设: 1. 对象越新,其生存期就越短 2. 对象越老,其生存期就越长 3. 对堆的一部分执行GC比对整个堆执行GC要快 CLR和JVM尽管都采用了分代式垃圾回收器,但是它们在很多处理方面都有些不同:分代机制,大对象堆,回收模式,回收算法,寻找存活对象效率等。 分代机制 在CLR中,对象按年龄可以分为三代:第0代、第1代、第2代,如下图所示: 在这 阅读全文

posted @ 2011-02-25 14:28 翔如飞飞 阅读(373) 评论(0) 推荐(0) 编辑

【转】垃圾回收系列(2):几种经典的垃圾回收算法

摘要: 本文是关于垃圾回收讲座的第二篇,第一篇为《垃圾回收系列(1):没有GC,世界将会怎样》。 本文主要关注垃圾回收算法。垃圾回收机制,最早出现于世界上第二元老语言Lisp,Jean E. Sammet曾经说过,Lisp语言最长久的共享之一是一个非语言特征,即代表了系统自动处理内存的方法的术语极其技术——垃圾收集 (GC,Garbage Collection)。接下来我们介绍几种经典的垃圾回收算法,这些算法尽管出现于60、70年代,但是现在的CLR、JVM等上面的垃圾回收器,仍然 使用了它们。 引用计数算法 引用计数(Reference Counting)算法是每个对象计算指向它的指针的数量,当有一 阅读全文

posted @ 2011-02-25 14:27 翔如飞飞 阅读(319) 评论(0) 推荐(0) 编辑

【转】垃圾回收系列(1):没有GC,世界将会怎样

摘要: 最近在公司内部做了一次关于垃圾回收的讲座,我打算用几篇文章把讲座的内容整理出来,供大家参考。在开始之前,我们有必要稍微复习一下内存分配的主要方式,大多数主流语言都支持三种内存分配方式: 1. 静态分配:静态变量和全局变量的分配形式 2. 自动分配:在栈中为局部变量分配内存的方法 3. 动态分配:在堆中动态分配内存空间以存储数据的方式 如何管理堆对象的生命周期,正是我们要探讨的话题。从面向对象的角度来看,每个对象的生命周期应该由自己管理,也就是说,作为一个对象,它知道自己 什么时候被创建,什么时候被销毁。然而事实上却不是这样,因为对象之间有相互引用关系,所以对象往往不知道自己什么时候可以宣告死亡 阅读全文

posted @ 2011-02-25 14:26 翔如飞飞 阅读(233) 评论(0) 推荐(0) 编辑

2011年2月23日 #

IL语言之.ctor

摘要: 简述:构造函数,在类被实例化时,它会被自动调用。 当C#的类被编译后,在IL代码中会出现一个名为.ctor的方法,它就是我们的构造函数,对应C#中的构造函数。且看下面的代码: public class Class1 { private string name; private int age; } 类Class1中没有显示的构造函数,只有两字段,现在用ILDasm.exe打开编译后生成的exe文件,会看到: 可以看到这里有个.ctor,我们没有定义构造函数,但这里却出现了.ctor,这就说明了: 当没有显示定义构造函数时,会自动生成一个构造函数,它没有参数,没有返回值。 那我们来看看这个.ct 阅读全文

posted @ 2011-02-23 14:23 翔如飞飞 阅读(608) 评论(0) 推荐(0) 编辑

字符串的驻留(String Interning)

摘要: 关于字符串的驻留的机制,对于那些了解它的人肯定会认为很简单,但是我相信会有很大一部分人对它存在迷惑。在开始关于字符串的驻留之前,先给出一个有趣的Sample: Code Snip: staticvoidMain(string[]args) { stringstr1="ABCD1234"; stringstr2="ABCD1234"; stringstr3="ABCD"; stringstr4="1234"; stringstr5="ABCD"+"1234"; stringst 阅读全文

posted @ 2011-02-23 14:09 翔如飞飞 阅读(173) 评论(0) 推荐(0) 编辑

类型实例的创建位置、托管对象在托管堆上的结构

摘要: 1. 值类型实例的创建位置: 对于值类型的实例,CLR在运行时有两种分配方式:(1) 如果该值类型的实例作为类型中的方法(Method)中的局部变量,则该实例被创建在线程栈上;(2) 如果该值类型的实例作为类型的成员,则该实例作为引用类型(引用类型在GC堆或者LOH上创建)的实例的一部分,被创建在GC堆上。下面这段代码演示了这两种情况: publicclassTest1{privateinti;//上面(2)中的情况,生成Test的实例的同时,int类型的实例i被创建在GC堆上publicTest1(){byteb=0;//(1)中的情况,byte类型的实例b被创建在执行这段代码的线程栈上}} 阅读全文

posted @ 2011-02-23 14:05 翔如飞飞 阅读(201) 评论(0) 推荐(0) 编辑

Metadata 的格式和意义

摘要: 如果你閱讀 .NET 的書,你可能會常常看到 Metadata 一詞。根據書上的說法,Metadata 可以為 .NET 帶來莫大的威力。事實上,Java 的 class 檔案內也具有 Metadata。只是 Java 與 .NET 的 metadata 結構不同,且 Java 的 metadata 不若 .NET 的完整。不過,如果你是 Java 的愛好者,你可以放心,因為預計在未來版本中,Java 也會向 .NET 看齊,提供更豐富的 Metadata。 本文章的主旨在簡單地介紹 Metadata。我會先介紹 .NET 的 Metadata 格式和意義,本文章的下篇會接著介紹 .Java 阅读全文

posted @ 2011-02-23 13:11 翔如飞飞 阅读(331) 评论(0) 推荐(0) 编辑

.NET CLR Hosting 简介

摘要: 某些軟體(例如 Microsoft SQL Server 2005、Borland JBuilder)需要支援 .NET 或 Java,這樣的軟體可以讓 .NET CLR 或 Java VM 寄宿在自己身上,成為自己的一部份,被 CLR/JVM 所寄宿的軟體就稱為 CLR Host(宿主)或 JVM Host。本文章簡單地介紹 .NET CLR Hosting 的觀念。 本文章內容分成三部分,首先介紹 Shim 和 CLR 的關係,接著說明 CLR Host,最後介紹 .NET Framework CLR 2.0 版的 11 個 Hosting Manager。 Shim and VMs 當你 阅读全文

posted @ 2011-02-23 13:09 翔如飞飞 阅读(309) 评论(0) 推荐(0) 编辑

.NET中间语言(IL)

摘要: NET CLR 和 Java VM 都是堆疊式虛擬機器(Stack-Based VM),也就是說,它們的指令集(Instruction Set)都是採用堆疊運算的方式:執行時的資料都是先放在堆疊中,再進行運算。Java VM 有約 200 個指令(Instruction),每個指令都是 1 byte 的 opcode(操作碼),後面接不等數目的參數;.NET CLR 有超過 220 個指令,但是有些指令使用相同的 opcode,所以 opcode 的數目比指令數略少。特別注意,.NET 的 opcode 長度並不固定,大部分的 opcode 長度是 1 byte,少部分是 2 byte。 本文 阅读全文

posted @ 2011-02-23 13:02 翔如飞飞 阅读(410) 评论(0) 推荐(0) 编辑

2011年1月12日 #

NHibernate and the Unit of Work Pattern

摘要: Part 1 Introduction Martin Fowler writes: "When you're pulling data in and out of a database, it's important to keep track of what you've changed; otherwise, that data won't be written back into the database. Similarly you have to insert new objects you create and remove any objects you delete." 阅读全文

posted @ 2011-01-12 14:25 翔如飞飞 阅读(813) 评论(0) 推荐(0) 编辑

上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 30 下一页