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

    new

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

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

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

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

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

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

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

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

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

      

  • 相关阅读:
    再战MFC中的消息机制
    指针到底是由谁决定的
    静态初始化的一些东西
    人生少走弯路
    win32 程序分析
    毕业之前要做好这些准备
    今天写二叉树秀逗了~~~
    How to declare global variables in Android? --- Application Subclasses
    android Application类的详细介绍
    Android setTag方法的key问题
  • 原文地址:https://www.cnblogs.com/76674718/p/1594223.html
Copyright © 2011-2022 走看看