无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網 會員登陸 & 注冊

構造函數和析構函數,垃圾回收機制

2023-02-15 15:45 作者:北星Knight  | 我要投稿

構造函數

基本概念:

  • 在實例化對象時,會調用的用于初始化的函數。

  • 如果不寫 默認存在一個無參構造函數。

  • 類中是允許自己申明無參構造函數的,但結構體不允許。


構造函數的寫法:

  • 沒有返回值。

  • 函數名與類名必須相同。

  • 沒有特殊需求時 一般都是public的。

  • 構造函數可以被重載。

  • this代表當前調用該函數的對象自己。


注意:如果不自己實現無參構造函數而實現了有參構造函數,則會失去默認的無參構造。


析構函數

基本概念:當引用類型的堆內存被回收時,會調用該函數。對于需要手動管理內存的語言,需要在析構函數中做一些內存回收處理。


垃圾回收機制

垃圾回收:英文簡寫GC(Garbage Collector)

垃圾回收的過程是在遍歷堆(Heap)上動態(tài)分配的所有對象

通過識別它們是否被引用來確定哪些對象是垃圾,哪些對象仍要被使用

所謂的垃圾就是沒有被任何變量,對象引用的內容

垃圾就需要被回收釋放


垃圾回收有很多種算法,比如:

  • 引用計數(Reference Counting)

  • 標記清除(Mark Sweep)

  • 標記整理(Mark Compact)

  • 復制集合(Copy Collection)


注意:

  • GC只負責堆(Heap)內存的垃圾回收

  • 引用類型都是存在堆(Heap)中的,所以它的分配和釋放都通過垃圾回收機制來管理

  • 棧(Stack)上的內存是由系統(tǒng)自動管理的

  • 值類型在棧(Stack)中分配內存的,他們有自己的生命周期,不用對他們進行管理,會自動分配和釋放


C#中內存回收機制的大概原理:

0代內存? ? ?1代內存? ? ?2代內存


代的概念:

  • 代是垃圾回收機制使用的一種算法(分代算法)

  • 新分配的對象都會被配置在第0代內存中

  • 每次分配都可能會進行垃圾回收以釋放內存


在一次內存回收過程開始時,垃圾回收器會認為堆中全是垃圾,會進行以下兩步:

  1. 標記對象從根(靜態(tài)字段、方法參數)開始檢查引用對象,標記后為可達對象,未標記為不可達對象,不可達對象就認為是垃圾。

  2. 搬遷對象壓縮堆? (掛起執(zhí)行托管代碼線程) 釋放未標記的對象 搬遷可達對象 修改引用地址


大對象總被認為是第二代內存? 目的是減少性能損耗,提高性能

不會對大對象進行搬遷壓縮? 85000字節(jié)(83kb)以上的對象為大對象


構造函數和析構函數,垃圾回收機制的評論 (共 條)

分享到微博請遵守國家法律
永年县| 镶黄旗| 武乡县| 道真| 温宿县| 小金县| 化州市| 新化县| 平江县| 怀化市| 淅川县| 池州市| 友谊县| 玛纳斯县| 金沙县| 楚雄市| 资溪县| 黄浦区| 道真| 土默特右旗| 杂多县| 咸丰县| 农安县| 射阳县| 嘉义市| 来凤县| 壶关县| 南昌市| 张掖市| 齐齐哈尔市| 临澧县| 自贡市| 盐山县| 蓝田县| 逊克县| 扶绥县| 巴林右旗| 泽库县| 成安县| 新乐市| 临夏市|