摘要: 区别:1、值类型通常被分配在栈上,它的变量直接包含变量的实例,使用效率比较高。2、引用类型分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。3、值类型继承自ValueType(注意:而System.ValueType又继承自System.Object);而引用类型继承自System.Object。 4、值类型变量包含其实例数据,每个变量保存了其本身的数据拷贝(副本),因此在默认情况下,值类型的参数传递不会影响参数本身;而引用类型变量保存了其数据的引用地址,因此以引用方式进行参数传递时会影响到参数本身,因为两个变量会引用了内存中的同一块地址。 5、值类型有两种表 阅读全文
posted @ 2012-12-19 14:22 流年莫逝 阅读(479) 评论(0) 推荐(0) 编辑
摘要: new关键字返回的是一个指向堆上对象的引用,而不是真正的对象本身。如果在方法作用域内将引用变量声明为本地变量,这个引用变量保存在栈内,以供应程序以后使用,CLR为了便于寻找不可访问的对象时,为了优化,堆上的每一个对象指定为属于某“代”。对象在堆上存在的时间越长,它就更可能应该保留。第0代:从没有被标记为回收的新分配的对象。第1代:在一次垃圾回收中没有被回收的对象(也就是说,它标记为回收,但因为已经获取了足够的堆空间而没有被删除)。第2代:在一次以上的垃圾回收后仍然没有被回收的对象。第0和1代称为暂时代。.NET4.0之前,运行时使用并发垃圾回收技术来清理不再使用的对象。当对第0代或第1代对象执 阅读全文
posted @ 2012-12-19 14:18 流年莫逝 阅读(339) 评论(0) 推荐(1) 编辑
摘要: new关键字返回的是一个指向堆上对象的引用,而不是真正的对象本身。如果在方法作用域内将引用变量声明为本地变量,这个引用变量保存在栈内,以供应程序以后使用,CLR为了便于寻找不可访问的对象时,为了优化,堆上的每一个对象指定为属于某“代”。对象在堆上存在的时间越长,它就更可能应该保留。第0代:从没有被标记为回收的新分配的对象。第1代:在一次垃圾回收中没有被回收的对象(也就是说,它标记为回收,但因为已经获取了足够的堆空间而没有被删除)。第2代:在一次以上的垃圾回收后仍然没有被回收的对象。第0和1代称为暂时代。.NET4.0之前,运行时使用并发垃圾回收技术来清理不再使用的对象。当对第0代或第1代对象执 阅读全文
posted @ 2012-12-19 14:16 流年莫逝 阅读(78) 评论(0) 推荐(0) 编辑