欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Net內(nèi)存管理五大基礎(chǔ)

 更新時(shí)間:2021年10月18日 17:14:10   作者:RICKY LEEKS  
這篇文章主要給大家分享Net內(nèi)存管理五大基礎(chǔ)內(nèi)容,文章講圍繞Net內(nèi)存管理詳細(xì)介紹文章內(nèi)容,感興趣的朋友可以參考一下,希望對你有所幫助

1.小對象怎么處理的?

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

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

當(dāng)Gen 2變滿時(shí),將發(fā)生GC完全運(yùn)行。這將清除不需要的Gen 2對象,將Gen 1對象移至Gen 2,然后將Gen 0對象移至Gen 1,最后清除所有未引用的內(nèi)容。每次運(yùn)行GC之后,都會(huì)壓縮受影響的堆,以將仍在使用的內(nèi)存保持在一起。

這種代代相傳的方法可確保事情高效運(yùn)行-耗時(shí)的壓縮過程僅在絕對必要時(shí)才會(huì)發(fā)生。

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

2.較大的對象會(huì)怎樣?

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

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

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

此外,當(dāng)需要分配大對象時(shí),.NET還是傾向于將對象附加到末尾,而不是運(yùn)行昂貴的Gen 2 GC。這對性能有好處,但是是導(dǎo)致內(nèi)存碎片的重要原因

3.垃圾收集器可以在不同的模式下運(yùn)行以優(yōu)化性能

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

工作站模式為用戶提供了最大的響應(yīng)速度,并減少了由于GC造成的暫停。它可以作為“并發(fā)”或“非并發(fā)”運(yùn)行,指的是運(yùn)行GC的線程。默認(rèn)值為并發(fā),它為GC使用單獨(dú)的線程,因此應(yīng)用程序可以在GC運(yùn)行時(shí)繼續(xù)執(zhí)行。

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

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

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

4.引用不足會(huì)在性能和內(nèi)存效率之間折衷

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

弱引用特別適用于大型數(shù)據(jù)結(jié)構(gòu)。例如,假設(shè)您有一個(gè)允許用戶瀏覽大型數(shù)據(jù)結(jié)構(gòu)的應(yīng)用程序,他們可能會(huì)返回其中的一些數(shù)據(jù)。您可以將任何強(qiáng)引用轉(zhuǎn)換為他們?yōu)g覽的結(jié)構(gòu)為弱引用。如果用戶返回到這些結(jié)構(gòu),則可以使用它們,但如果沒有,GC可以根據(jù)需要回收內(nèi)存。

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

.NET使用一種稱為GCHandle的結(jié)構(gòu)來跟蹤堆對象。GCHandle可用于在托管域和非托管域之間傳遞對象引用,.NET維護(hù)一個(gè)GCHandles表以實(shí)現(xiàn)此目的。GCHandle有四種類型,包括固定的,用于將對象固定在內(nèi)存中的特定地址。

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

到此這篇關(guān)于Net內(nèi)存管理五大基礎(chǔ)的文章就介紹到這了,更多相關(guān)Net內(nèi)存管理五大基礎(chǔ)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ASP.NET?Core使用功能開關(guān)控制路由訪問操作

    ASP.NET?Core使用功能開關(guān)控制路由訪問操作

    這篇文章主要介紹了ASP.NET?Core使用功能開關(guān)控制路由訪問操作,而對于一些試驗(yàn)性的功能,我們并不希望用密碼去控制是否允許訪問,而是想用一種開關(guān)的方式開放,下面文章我們就來試著實(shí)現(xiàn)這個(gè)功能,需要的小伙伴可以參考一下
    2022-02-02
  • 在 ASP.NET Core 中自動(dòng)啟用 CAP 事務(wù)詳情

    在 ASP.NET Core 中自動(dòng)啟用 CAP 事務(wù)詳情

    本篇文章旨在描述如何在 ASP.NET Core項(xiàng)目中并以一種簡便的方式啟用CAP事務(wù),因?yàn)樵谖覀兊氖纠卸际侵苯友菔颈容^直觀的方式,沒有進(jìn)行封裝,有些初學(xué)者同學(xué)不太會(huì),找到問我如何封裝,本篇文章主要基于 Entity Framework 來進(jìn)行演示
    2021-10-10
  • DataGridView控件詳細(xì)介紹

    DataGridView控件詳細(xì)介紹

    DataGridView是用于Windows Froms 2.0的新網(wǎng)格控件。它可以取代先前版本中DataGrid控件,它易于使用并高度可定制,支持很多我們的用戶需要的特性
    2012-11-11
  • ASP.NET對Cookie的操作

    ASP.NET對Cookie的操作

    這篇文章介紹了ASP.NET操作Cookie的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • .Net性能調(diào)優(yōu)-ArrayPool詳情

    .Net性能調(diào)優(yōu)-ArrayPool詳情

    ArrayPool具有高性能 托管 數(shù)組緩沖池,可重復(fù)使用,用 租用 空間的方式代替 重新分配 數(shù)組空間的行為的特點(diǎn)及可以在頻繁創(chuàng)建和銷毀數(shù)組的情況下 提高性能 ,減少垃圾回收器的壓力的優(yōu)點(diǎn),下面文章內(nèi)容將詳細(xì)對其做介紹,需要的朋友可以參考一下
    2021-09-09
  • C#中string與byte[]的轉(zhuǎn)換幫助類-.NET教程,C#語言

    C#中string與byte[]的轉(zhuǎn)換幫助類-.NET教程,C#語言

    在寫c#程序時(shí),string和byte[]之間的轉(zhuǎn)換比較煩,在移植一些老程序時(shí)感覺很不好。我在c#中使用des和tripledes時(shí)移植一塊老代碼時(shí)也遇到了同樣的情況。為了下次不為同樣的事情煩惱,就寫了下面的幫助類。
    2008-03-03
  • 為什么ASP.NET Core 數(shù)據(jù)庫連接串的值和appsettings.json配的不一樣?

    為什么ASP.NET Core 數(shù)據(jù)庫連接串的值和appsettings.json配的不一樣?

    這篇文章主要介紹了為什么數(shù)據(jù)庫連接串的值和appsettings.json配的不一樣?下面我們就帶著疑問閱讀下文,需要的小伙伴可以參考一下,希望對你有所幫助
    2022-02-02
  • 從零開始學(xué)ASP.NET-基礎(chǔ)篇

    從零開始學(xué)ASP.NET-基礎(chǔ)篇

    從零開始學(xué)ASP.NET-基礎(chǔ)篇...
    2006-07-07
  • .Net實(shí)現(xiàn)圖片裁剪圖片縮放及圖片加水印詳解

    .Net實(shí)現(xiàn)圖片裁剪圖片縮放及圖片加水印詳解

    這篇文章主要為大家介紹了.Net實(shí)現(xiàn)圖片裁剪圖片縮放及圖片加水印實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • ASP遺留的二十個(gè)積習(xí)

    ASP遺留的二十個(gè)積習(xí)

    ASP遺留的二十個(gè)積習(xí)
    2006-07-07

最新評論