zoukankan      html  css  js  c++  java
  • new与垃圾回收

    new

      new关键字返回的是一个指向堆上对象的引用,而不是真正的对象本身。这个引用变量保存在栈内,以供应用程序以后使用。

      1、使用new关键字将一个对象分配在托管堆上,然后不用再管:当对象从代码库的任何部分都不可达时,垃圾回收器就会从堆中删除它。

      2、托管堆不只是一个由CLR访问的随机内存块。.NET垃圾回收器是堆的“清洁工”,它会压缩空的内存块来实现优化(必要的时候)。

    newobj指令通知CLR执行下面的核心任务

      1、计算分配对象所需要的总内存数(包含类型的成员变量和类型的基类所需的必要内存)

      2、检查托管堆,确保有足够的空间来放置要分配的对象。

      3、在将引用返回给调用者之前,移动下一个对象的指针,指向托管堆上的下一个可用的位置。

      当处理newobj指令时,如果CLR判定托管堆没有足够的空间来分配所请求的类型,它会执行一次垃圾回收来尝试释放内存。

      如果托管堆没有足够的内存来分配所请求,就会进行垃圾回收。当确实发生垃圾回收时,垃圾回收器暂时挂起所有在当前进程(process)中所有的活动的线程(thread)以保证应用程序在回收过程中不会访问堆。

      

  • 相关阅读:
    docker相关
    多线程
    设计模式
    ftp下载乱码问题
    Windows无法启动SQL server 代理服务(服务器)错误1067:进程意外终止
    Struts2 if标签
    Java项目编译时经常会出现不编译,或者报一些假性错误
    ajaxSubmit 上传文件 提示下载json处理
    MySQL中优化sql语句查询常用的30种方法
    mybatis 中的where标签
  • 原文地址:https://www.cnblogs.com/76674718/p/1594223.html
Copyright © 2011-2022 走看看