c#中的对象生命周期


是定义在代码文件中,保存在硬盘上 ,是对象的蓝本,它描述了对象在内存中大概是什么样子的。
对象:
我们都知道.net将值类型存储在栈中,引用类型存储在堆中,这样做的原因是栈中的数据是轻量级的,而堆中的数据是重量级,目的是在应用程序在操作它们的时候比较方便存取,从而提高程序的运行速度。创建一个对象实例,用new+类名+(),就创建了一个对象实例,创建的这个对象实例是引用类型,被存储在托管堆中,以后就不用管它了,new关键字返回一个对象实例存在的地址,这个存储地址(引用)变量,被放在栈中,实际上应用程序在运行时都是操作的这个引用。
简单了解一下
无论是指类型的变量或是类类型的变量,其存储单元都是在栈中分配的,唯一不同的是类类型的变量实际上存储的是该类对象的指针,相当于vc6中的CType*,只是在.net平台的语言中将指针的概念屏蔽掉了。我们都知道栈的一大特点就是LIFO(后进先出),这恰好与作用域的特点相对应(在作用域的嵌套层次中,越深层次的作用域,其变量的优先级越高)。因此,再出了“}”后,无论是值类型还是类类型的变量(对象指针)都会被立即释放(值得注意的是:该指针所指向的托管堆中的对象并未被释放,正等待GC的回收)。.NET中的栈空间是不归GC管理的,GC仅管理托管堆。
我想就我的理解简要说明一下:
1、GC只收集托管堆中的对象。
2、所有值类型的变量都在栈中分配,超出作用域后立即释放栈空间,这一点与VC6完全
一样。
3、区别类类型的变量和类的对象,这是两个不同的概念。类类型的变量实际上是该类对
象的指针变量。如C#中的定义CType myType;与VC6中的定义CType* myType;是完全一
样的,只是.net语言将*号隐藏了。与VC6相同,必须用new 关键字来构造一个对象,

            如(C#):CType   myType=new   CType();其实这一条语句有两次内存分配,一次是为类类   型变量myType在栈中分配空间(指针类型所占的空间,对32位系统分配32位,64位   系统则分配64位,在同一个系统中,所有指针类型所占的内存空间都是一样的,而   不管该类型的指针所指向的是何种类型的对象),另一次是在托管堆(GC所管理的   堆)中构造一个CType类型的对象并将该对象的起始地址赋给变量myType。正因为如   此才造成了在同一个作用域中声明的类类型的变量和该类型的对象的生存期不一样。

C#中对象的生命周期相关推荐

  1. java中的的一些生命周期,Java中对象的生命周期

    Java中对象的生命周期 (1) 对象生命周期的开始 对象生命周期开始时,需要为对象分配内存,并且初始化它的实例变量: 对象生命周期结束 Java虚拟机的垃圾回收线程回收对象的内存. (2) 创建一个 ...

  2. java session 生命周期_java之hibernate之session中对象的生命周期

    1. session是用来执行对象的crud操作,并且session是对象事务工厂.session是线程级别的,所以生命周期比较短. 2.session中对象的生命周期图: 3.session中对象的 ...

  3. python对象的生命周期_python对象的生命周期

    引言 碰到以下问题: 代码1: from Tkinter import * root = Tk() photo = PhotoImage(file=r'E:\workspace\python\111. ...

  4. python对象的生命周期_(python)通过一个代码例子来分析对象的生命周期 | 学步园...

    最近在学习python,看的是<简明python教程>,写的很是通俗易懂. 在一个类和对象的变量的例子中,看到代码运行结果突然想到在python中对象的生命周期的问题,代码运行结果: #! ...

  5. python对象的生命周期_(python)通过一个代码例子来分析对象的生命周期

    最近在学习python,看的是<简明python教程>,写的很是通俗易懂. 在一个类和对象的变量的例子中,看到代码运行结果突然想到在python中对象的生命周期的问题,代码运行结果: #! ...

  6. java 中 bean 的生命周期

    java 中 bean 的生命周期 本篇中会对涉及到的知识点皆做出描述: 首先,我们先了解先虚拟机的类加载机制: 虚拟机把描述类的数据从Class 文件中加载到内存,并对数据进行校验.转换解析和初始化 ...

  7. Java 对象的生命周期

    Java对象的生命周期 在Java中,对象的生命周期包括以下几个阶段: 创建阶段(Created) 应用阶段(In Use) 不可见阶段(Invisible) 不可达阶段(Unreachable) 收 ...

  8. Hibernate学习(4)- Hibernate对象的生命周期

    1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联: 2.持久化状态(P ...

  9. C++对象模型9——临时对象的生命周期、模板及实例化分析、内联函数

    一.临时对象的生命周期 T c=a+b 假设T是一个类型,那么上述代码执行时,首先会产生一个临时对象用来存放a+b的结果(拷贝初始化临时对象),然后用该临时对象拷贝初始化c,最后临时对象被释放.如果开 ...

最新文章

  1. 如何用 Java 实现简单的区块链
  2. 在微信小程序里自动获得当前手机所在的经纬度并转换成地址
  3. Markdown编辑器“MarkdownPad”下载安装(图)
  4. Java的clone()用法实例解析
  5. 6.2 gzip:压缩或解压文件
  6. HTML郑州宅急送试题
  7. hdu 1536(博弈)
  8. python apache mysql_在Linux系统上部署Apache+Python+Django+MySQL环境
  9. bmp制作自定义字体(cocostudio使用)
  10. 天津大学学硕和专硕的区别_21考研考生,学硕与专硕的区别你必须知道,选错或后悔读研...
  11. Bean的作用域scope
  12. 浅析:提升手机APP开发和运营成效的经验分享
  13. qq音乐网络异常获取音乐失败_qq音乐网络异常获取音频失败怎么办
  14. 目标追踪笔记---帧差法
  15. 关于华为P9手机的解锁、刷Recovery、获取Root、安装Busybox,以及升级降级的全过程(和一些错误的解决方法)
  16. 免费的中文深度学习全书:《深度学习理论与实战:提高篇》
  17. Ext组件渲染render的全过程详述
  18. Vue动态计算百分比配合vux插件
  19. linux进程signal,Linux Signal 示例
  20. 杰伦的《不能说的秘密》の细节 (详解)

热门文章

  1. tar.gz文件解压
  2. 【程序攻防】当前程序攻防形势
  3. 【智能车学习】全向行进控制算法总结——驱动部分
  4. 代码随想录算法训练营15期 Day 7 | 454.四数相加II 、 383. 赎金信 、15. 三数之和 、18. 四数之和
  5. 腾讯 腾讯电脑管家客户端高级工程师 c++ 一面
  6. oracle tns12535,TNS-12535 TNS-00505的处理方法
  7. 电脑城要倒闭?“泰酷辣”
  8. AWS GCE 和 Azure -- 一个技术合伙人的比较
  9. 实现Windows11深色主题自由切换再也不是梦~
  10. jsp如何显示ftp服务器的图片,Jsp页面上传图片和缩略图查看