真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

GC.Collect如何影響垃圾回收-創(chuàng)新互聯(lián)

根據(jù)垃圾回收的算法,對象在內(nèi)存中是按代的方式存放的,通常情況下,當?shù)?代沾滿分配的空間的時候(比如是256k),GC就會啟動去回收第0代對象,幸存的第0代對象會被放入第1代中去,第1代的對象要等到放滿了才會收集,因此,越是年輕的代越是被頻繁的收集,由于通常情況下GC只收集第0代對象,既保證了可回收較多的內(nèi)存,又忽略了老一代的對象,從而加快了垃圾回收的速度,提升了性能。

創(chuàng)新互聯(lián)堅信:善待客戶,將會成為終身客戶。我們能堅持多年,是因為我們一直可值得信賴。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。十多年網(wǎng)站建設經(jīng)驗創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營銷服務商,為您提供成都網(wǎng)站制作、成都網(wǎng)站建設、網(wǎng)站設計、H5響應式網(wǎng)站、網(wǎng)站制作、成都品牌網(wǎng)站建設、小程序開發(fā)服務,給眾多知名企業(yè)提供過好品質(zhì)的建站服務。

因此當調(diào)用gc.collect的時候,相當于強制的對所有代,不管年輕還是老的都執(zhí)行一次回收。由于垃圾回收器在回收的資源的時候,正在執(zhí)行托管代碼的線程都會被掛起,具體的細節(jié)相當復雜,因為有的線程運行在不安全的點,CLR不能執(zhí)行垃圾回收,因此CLR會采用線程劫持技術(shù),即通過修改線程棧的方法,來做垃圾回收。這種復雜性使得性能降低。除非確定大量的舊對象死亡,才考慮調(diào)用這個方法。

所以,在一般情況下,盡量不要干預垃圾回收器工作,即盡量避免主動調(diào)用GC.Collect。

由于垃圾回收是異步的,CLR有一個專用的線程負責垃圾回收,因此,即使調(diào)用GC.Collect,也并不是實時的調(diào)用了Finalize,因此要保證確實調(diào)用了析構(gòu)方法,可以使用語句GC.WaitForPendingFinalizers()。

下面是一段代碼,通過注釋掉

GC.Collect();

GC.WaitForPendingFinalizers();

語句,看出端倪。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using System.Reflection;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            AA aa1 = new AA("1");
            AA aa2 = new AA("2");
            AA aa3 = new AA("3");
            aa1 = null;
            aa2 = null;
            //GC.Collect();
            //GC.WaitForPendingFinalizers();
            var tmp = aa3;
        }
    }
    public class AA
    {
        public string id = "";
        public AA(string s)
        {
            id = s;
            Console.WriteLine("對象AA_" + s + "被創(chuàng)建了");
        }
        ~AA()
        {
            Console.WriteLine(id + " 析構(gòu)函數(shù)被執(zhí)行了");
        }
    }
}

當語句被注釋掉的時候,雖然aa1和aa2都設成了null,但是垃圾回收并不是馬上就把它們回收掉。對象可能都被放在第0代上,等進程結(jié)束的時候,由垃圾回收器一起回收。所以輸出如下,順序是321

GC.Collect如何影響垃圾回收

但是當取消注釋后,由于強制垃圾回收時,aa1對象和aa2對象都是null,因此就把它們回收掉了。順序就是213了。

GC.Collect如何影響垃圾回收

注意,如果aa1和aa2不設成null,那么強制回收時,并不認為這2個對象可以回收。因此還是會等到進程結(jié)束的時候才會回收。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


新聞標題:GC.Collect如何影響垃圾回收-創(chuàng)新互聯(lián)
文章位置:http://weahome.cn/article/igged.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部