• new与垃圾回收


    new

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

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

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

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

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

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

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

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

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

      

  • 相关阅读:
    mysql 错误 1067: 进程意外终止
    VPS主机MSQL意外中断重启就好但10来个小时又中断的了如些反复
    使用hibernate连接mysql自动中断的问题
    40个国外联盟
    从服务里删除mysql
    外国广告联盟[16个]
    stm32学习笔记:GPIO外部中断的使用
    NO.2 设计包含min 函数的栈
    GPS数据,实测
    LATEX使用总结
  • 原文地址:https://www.cnblogs.com/76674718/p/1594223.html
Copyright © 2020-2023  润新知