成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇學會.Net內存管理五大基礎

開發 后端
小型.NET對象被分配到小型對象堆(SOH)上。其中有3種:第0代,第1代和第2代。對象根據其壽命向上移動。

本文轉載自微信公眾號「DotNET技術圈」,作者RICKY LEEKS  。轉載本文請聯系DotNET技術圈公眾號。

1.小對象怎么處理的?

小型.NET對象被分配到小型對象堆(SOH)上。其中有3種:第0代,第1代和第2代。對象根據其壽命向上移動。

將新對象放在Gen 0上。當Gen 0充滿時,.NET垃圾收集器(GC)運行,處理不再需要的對象,并將其他所有內容移至Gen1。如果Gen 1充滿,則GC再次運行,也可以將Gen 1中的對象移動到Gen 2中。

當Gen 2變滿時,將發生GC完全運行。這將清除不需要的Gen 2對象,將Gen 1對象移至Gen 2,然后將Gen 0對象移至Gen 1,最后清除所有未引用的內容。每次運行GC之后,都會壓縮受影響的堆,以將仍在使用的內存保持在一起。

這種代代相傳的方法可確保事情高效運行-耗時的壓縮過程僅在絕對必要時才會發生。

注意:如果您在Gen 2中看到大量的內存,則表明內存已被保留很長時間,并且可能存在內存問題。這是內存分析工具可以派上用場的地方。

2.較大的對象會怎樣?

大于85 KB的對象被分配到大對象堆(LOH)。由于復制大塊內存的開銷,它們沒有被壓縮。當發生完整的GC時,未使用的LOH對象的地址范圍將記錄在可用空間分配表中。

分配新對象后,將在此可用空間表中檢查足以容納該對象的地址范圍。如果存在,則將對象分配到那里,如果不存在,則將對象分配到下一個可用空間。

由于對象不太可能是空地址范圍的確切大小,因此對象之間幾乎總是會留有小塊內存,從而導致碎片。如果這些塊小于85 KB,則根本沒有重用的可能性。因此,隨著分配需求的增加,即使碎片空間仍然可用,也會保留新的段。

此外,當需要分配大對象時,.NET還是傾向于將對象附加到末尾,而不是運行昂貴的Gen 2 GC。這對性能有好處,但是是導致內存碎片的重要原因

3.垃圾收集器可以在不同的模式下運行以優化性能

.NET通過為GC提供多種模式來解決性能與堆效率之間的權衡問題。

工作站模式為用戶提供了最大的響應速度,并減少了由于GC造成的暫停。它可以作為“并發”或“非并發”運行,指的是運行GC的線程。默認值為并發,它為GC使用單獨的線程,因此應用程序可以在GC運行時繼續執行。

服務器模式可為服務器環境提供最大的吞吐量,可伸縮性和性能。在服務器模式下,段大小和生成閾值通常比工作站模式大得多,這反映了對服務器的更高要求。

服務器模式在多個線程上并行運行垃圾回收,為每個邏輯處理器分配一個單獨的SOH和LOH,以防止線程相互干擾。

.NET框架提供了一種交叉引用機制,因此對象仍然可以在堆之間相互引用。但是,由于應用程序響應能力不是服務器模式的直接目標,因此在GC期間,所有應用程序線程都將被掛起。

4.引用不足會在性能和內存效率之間折衷

弱對象引用了GC根的替代來源,使您可以保留對象,同時在GC需要時可以收集對象。它們是代碼性能和內存效率之間的折衷。創建對象需要占用CPU時間,但保持加載狀態需要占用內存。

弱引用特別適用于大型數據結構。例如,假設您有一個允許用戶瀏覽大型數據結構的應用程序,他們可能會返回其中的一些數據。您可以將任何強引用轉換為他們瀏覽的結構為弱引用。如果用戶返回到這些結構,則可以使用它們,但如果沒有,GC可以根據需要回收內存。

5.對象固定可以創建在托管和非托管代碼之間傳遞的引用

.NET使用一種稱為GCHandle的結構來跟蹤堆對象。GCHandle可用于在托管域和非托管域之間傳遞對象引用,.NET維護一個GCHandles表以實現此目的。GCHandle有四種類型,包括固定的,用于將對象固定在內存中的特定地址。 

對象固定的主要問題是它可能導致SOH碎片化。如果將對象固定在GC期間,則根據定義,該對象無法重定位。根據您使用固定的方式,它會降低壓縮的效率,在堆中留下間隙。避免這種情況的最佳策略是在很短的時間內鎖定,然后釋放。

 

責任編輯:武曉燕 來源: DotNET技術圈
相關推薦

2023-11-28 08:29:31

Rust內存布局

2022-08-26 09:29:01

Kubernetes策略Master

2021-07-01 10:01:16

JavaLinkedList集合

2021-06-09 19:23:52

MySQLROLE管理

2022-01-02 08:43:46

Python

2009-11-13 15:12:54

ADO.NET入門

2022-02-07 11:01:23

ZooKeeper

2021-05-27 07:12:19

Python函數裝飾器

2021-05-11 08:54:59

建造者模式設計

2021-07-02 09:45:29

MySQL InnoDB數據

2021-07-06 08:59:18

抽象工廠模式

2023-01-03 08:31:54

Spring讀取器配置

2021-07-05 22:11:38

MySQL體系架構

2022-08-23 08:00:59

磁盤性能網絡

2009-07-02 11:29:30

MySQL參數

2019-07-09 14:17:28

Linux內存管理進程

2009-07-20 16:52:18

運維管理流程北塔

2021-11-30 19:58:51

Java問題排查

2021-12-07 08:50:40

字母區間字符串

2021-07-29 07:55:20

React實踐代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日日干夜夜操 | 日本精品一区二区 | 一级欧美一级日韩片免费观看 | 久久1区| 狠狠色狠狠色综合系列 | 久久久国产精品 | 欧产日产国产精品v | 日韩免费福利视频 | 亚洲免费精品 | 中文字幕在线观看 | 天天草狠狠干 | 久久久国产一区二区三区 | 亚洲午夜精品一区二区三区 | 日韩小视频 | 成人国产在线观看 | 欧美一卡二卡在线观看 | 亚洲成网站 | 日日网| 亚洲国产成人av好男人在线观看 | 高清视频一区二区三区 | 免费观看视频www | 国产高清视频在线观看播放 | 日韩欧美在线观看一区 | 国产精品国产三级国产aⅴ无密码 | 亚洲一区久久 | 日日久 | 精品视频在线免费观看 | 午夜激情小视频 | 亚洲国产精品一区二区第一页 | av网站在线看 | 欧美一区二区免费 | 中文字幕免费视频 | av一区二区三区在线观看 | 国产亚洲成av人在线观看导航 | 在线中文字幕av | 免费在线毛片 | 在线免费观看黄色网址 | 性高湖久久久久久久久3小时 | 亚州精品天堂中文字幕 | 免费黄色片在线观看 | 色偷偷噜噜噜亚洲男人 |