基于垃圾回收的內(nèi)存分析優(yōu)化方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種基于垃圾回收的內(nèi)存分析優(yōu)化方法,包括:將當(dāng)前托管內(nèi)存的垃圾回收附加到目標(biāo)進(jìn)程;基于附加到目標(biāo)程序的當(dāng)前托管內(nèi)存的垃圾回收,為該垃圾回收的開(kāi)始和該垃圾回收的結(jié)束設(shè)置斷點(diǎn);在設(shè)置的斷點(diǎn)觸發(fā)時(shí),分析并輸出當(dāng)前托管內(nèi)存信息。本發(fā)明還提供了一種基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng)。通過(guò)本發(fā)明的技術(shù)方案,可以在現(xiàn)有的基于垃圾回收的內(nèi)存分析基礎(chǔ)上,充分利用現(xiàn)有代碼完成準(zhǔn)確評(píng)估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生影響的內(nèi)存分析優(yōu)化,建立現(xiàn)有代碼參與的準(zhǔn)確評(píng)估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生影響的通用、統(tǒng)一分析優(yōu)化思路。
【專利說(shuō)明】基于垃圾回收的內(nèi)存分析優(yōu)化方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,具體地,涉及一種基于垃圾回收的內(nèi)存分析優(yōu)化方 法和一種基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng)。
【背景技術(shù)】
[0002] 現(xiàn)代軟件應(yīng)用越來(lái)越復(fù)雜,軟件也日益龐大,在一個(gè)龐大的系統(tǒng)中,很難評(píng)估內(nèi)存 對(duì)象的創(chuàng)建和回收對(duì)系統(tǒng)性能的具體影響。
[0003] 在現(xiàn)有技術(shù)中,對(duì)內(nèi)存進(jìn)行分析處理時(shí),需要通過(guò)多個(gè)不同時(shí)間點(diǎn)的內(nèi)存映像,并 結(jié)合性能計(jì)數(shù)器記錄來(lái)分析一段時(shí)間內(nèi)內(nèi)存的變化和系統(tǒng)性能記錄之間的關(guān)系。
[0004] 這種方法的缺點(diǎn)是只能進(jìn)行粗略估算,不能提供精確的數(shù)據(jù)供科學(xué)評(píng)估。
[0005] 因此,需要一種新的基于垃圾回收的內(nèi)存分析優(yōu)化技術(shù),可以在現(xiàn)有的基于垃圾 回收的內(nèi)存分析基礎(chǔ)上,充分利用現(xiàn)有代碼完成準(zhǔn)確評(píng)估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn) 生影響的內(nèi)存分析優(yōu)化,建立現(xiàn)有代碼參與的準(zhǔn)確評(píng)估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生 影響的通用、統(tǒng)一分析優(yōu)化思路。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明正是基于上述問(wèn)題,提出了一種新的基于垃圾回收的內(nèi)存分析優(yōu)化技術(shù), 可以在現(xiàn)有的基于垃圾回收的內(nèi)存分析基礎(chǔ)上,充分利用現(xiàn)有代碼完成準(zhǔn)確評(píng)估每次垃圾 回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生影響的內(nèi)存分析優(yōu)化,建立現(xiàn)有代碼參與的準(zhǔn)確評(píng)估每次垃圾回 收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生影響的通用、統(tǒng)一分析優(yōu)化思路。
[0007] 有鑒于此,本發(fā)明提出了一種基于垃圾回收的內(nèi)存分析優(yōu)化方法,包括:步驟 102 :將當(dāng)前托管內(nèi)存的垃圾回收附加到目標(biāo)進(jìn)程;步驟104 :基于步驟102附加到目標(biāo)程 序的當(dāng)前托管內(nèi)存的垃圾回收,為該垃圾回收的開(kāi)始和該垃圾回收的結(jié)束設(shè)置斷點(diǎn);步驟 108 :在步驟104設(shè)置的斷點(diǎn)觸發(fā)時(shí),分析并輸出當(dāng)前托管內(nèi)存信息。在該技術(shù)方案中,通過(guò) 為垃圾回收的開(kāi)始和結(jié)束設(shè)置斷點(diǎn),在斷點(diǎn)觸發(fā)時(shí),收集當(dāng)前的內(nèi)存對(duì)象,即可比對(duì)出每一 次垃圾回收哪些對(duì)象被回收掉了;從而實(shí)現(xiàn)不對(duì)現(xiàn)有代碼進(jìn)行修改的情況下,準(zhǔn)確評(píng)估每 次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生的影響,簡(jiǎn)化了內(nèi)存分析優(yōu)化的操作,減少了內(nèi)存分析優(yōu) 化的時(shí)間。
[0008] 在上述技術(shù)方案中,優(yōu)選地,在所述步驟104和步驟108之間,還包括:步驟106 : 在步驟104設(shè)置的斷點(diǎn)觸發(fā)時(shí),記錄當(dāng)前托管內(nèi)存信息;以及,所述步驟108具體包括:在 步驟104設(shè)置的斷點(diǎn)觸發(fā)時(shí),基于步驟106記錄的當(dāng)前托管內(nèi)存信息,分析并輸出當(dāng)前托管 內(nèi)存信息。在該技術(shù)方案中,可以記錄并存儲(chǔ)當(dāng)前托管內(nèi)存信息,為分析并輸出當(dāng)前托管內(nèi) 存信息、以及后期的查詢提供依據(jù)。
[0009] 在上述技術(shù)方案中,優(yōu)選地,所述步驟102將當(dāng)前托管內(nèi)存的垃圾回收附加到目 標(biāo)進(jìn)程的操作,具體包括:步驟202 :設(shè)置基于當(dāng)前托管內(nèi)存的垃圾回收的調(diào)試器和性能計(jì) 數(shù)器;步驟204 :將步驟202設(shè)置的調(diào)試器附加到目標(biāo)進(jìn)程,準(zhǔn)備開(kāi)始調(diào)試,打開(kāi)步驟202設(shè) 置的性能計(jì)數(shù)器,收集%Time In GC。在該技術(shù)方案中,通過(guò)預(yù)先設(shè)置調(diào)試器和性能計(jì)數(shù)器, 可以方便當(dāng)前托管內(nèi)存信息的分析和處理。
[0010] 在上述技術(shù)方案中,優(yōu)選地,所述步驟104為該垃圾回收的開(kāi)始和該垃圾回收的 結(jié)束設(shè)置斷點(diǎn)的操作,具體包括:在GCHeap的SuspendEE和RestartEE方法上設(shè)置斷點(diǎn),這 兩個(gè)方法對(duì)應(yīng)垃圾回收的開(kāi)始和結(jié)束。在該技術(shù)方案中,通過(guò)設(shè)置斷點(diǎn),對(duì)垃圾回收的開(kāi)始 和結(jié)束作標(biāo)記,使得當(dāng)前內(nèi)存托管信息的分析處理有據(jù)可尋,且不易出錯(cuò)。
[0011] 在上述技術(shù)方案中,優(yōu)選地,所述步驟108分析并輸出當(dāng)前托管內(nèi)存信息的操作, 具體包括:步驟302 :對(duì)比垃圾回收(即GC)開(kāi)始前和結(jié)束后的托管內(nèi)存對(duì)象,分析哪些對(duì) 象被頻繁的回收和創(chuàng)建;步驟304 :與步驟302同時(shí)進(jìn)行,對(duì)比垃圾回收期間性能計(jì)數(shù)器中 的%Time In GC情況,即可知道哪些對(duì)象被頻繁的回收和創(chuàng)建、對(duì)內(nèi)存的影響、以及由此產(chǎn) 生的CPU影響。在該技術(shù)方案中,通過(guò)對(duì)比性能計(jì)數(shù)器數(shù)據(jù),即可知道CPU中花在GC上的 時(shí)間,通過(guò)連續(xù)分析,即可知道哪一部分對(duì)象被頻繁的回收和創(chuàng)建,影響性能了。
[0012] 根據(jù)本發(fā)明的又一個(gè)方面,還提出了一種基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng),包 括:目標(biāo)進(jìn)程附加模塊,用于將當(dāng)前托管內(nèi)存的垃圾回收附加到目標(biāo)進(jìn)程;斷點(diǎn)設(shè)置模塊, 用于基于所述目標(biāo)進(jìn)程附加模塊附加到目標(biāo)程序的當(dāng)前托管內(nèi)存的垃圾回收,為該垃圾回 收的開(kāi)始和該垃圾回收的結(jié)束設(shè)置斷點(diǎn);當(dāng)前托管內(nèi)存信息輸出模塊,用于在所述斷點(diǎn)設(shè) 置模塊設(shè)置的斷點(diǎn)觸發(fā)時(shí),分析并輸出當(dāng)前托管內(nèi)存信息。在該技術(shù)方案中,通過(guò)為垃圾回 收的開(kāi)始和結(jié)束設(shè)置斷點(diǎn),在斷點(diǎn)觸發(fā)時(shí),收集當(dāng)前的內(nèi)存對(duì)象,即可比對(duì)出每一次垃圾回 收哪些對(duì)象被回收掉了;從而實(shí)現(xiàn)不對(duì)現(xiàn)有代碼進(jìn)行修改的情況下,準(zhǔn)確評(píng)估每次垃圾回 收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生的影響,簡(jiǎn)化了內(nèi)存分析優(yōu)化的操作,減少了內(nèi)存分析優(yōu)化的時(shí)間。
[0013] 在上述技術(shù)方案中,優(yōu)選地,上述基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng),還包括:當(dāng) 前托管內(nèi)存信息記錄模塊,用于在所述斷點(diǎn)設(shè)置模塊設(shè)置的斷點(diǎn)觸發(fā)時(shí),記錄當(dāng)前托管內(nèi) 存信息;以及,所述當(dāng)前托管內(nèi)存信息輸出模塊,用于在所述斷點(diǎn)設(shè)置模塊設(shè)置的斷點(diǎn)觸發(fā) 時(shí),基于所述當(dāng)前托管內(nèi)存信息記錄模塊記錄的當(dāng)前托管內(nèi)存信息,分析并輸出當(dāng)前托管 內(nèi)存信息。在該技術(shù)方案中,可以記錄并存儲(chǔ)當(dāng)前托管內(nèi)存信息,為分析并輸出當(dāng)前托管內(nèi) 存信息、以及后期的查詢提供依據(jù)。
[0014] 在上述技術(shù)方案中,優(yōu)選地,設(shè)置基于當(dāng)前托管內(nèi)存的垃圾回收的調(diào)試器和性 能計(jì)數(shù)器;將設(shè)置的調(diào)試器附加到目標(biāo)進(jìn)程,準(zhǔn)備開(kāi)始調(diào)試,打開(kāi)設(shè)置的性能計(jì)數(shù)器,收 集%11!1^ In GC。在該技術(shù)方案中,通過(guò)預(yù)先設(shè)置調(diào)試器和性能計(jì)數(shù)器,可以方便當(dāng)前托管 內(nèi)存信息的分析和處理。
[0015] 在上述技術(shù)方案中,優(yōu)選地,所述斷點(diǎn)設(shè)置模塊為該垃圾回收的開(kāi)始和該垃圾回 收的結(jié)束設(shè)置斷點(diǎn)的操作,具體包括:在GCHeap的SuspendEE和RestartEE方法上設(shè)置斷 點(diǎn),這兩個(gè)方法對(duì)應(yīng)垃圾回收的開(kāi)始和結(jié)束。在該技術(shù)方案中,通過(guò)設(shè)置斷點(diǎn),對(duì)垃圾回收 的開(kāi)始和結(jié)束作標(biāo)記,使得當(dāng)前內(nèi)存托管信息的分析處理有據(jù)可尋,且不易出錯(cuò)。
[0016] 在上述技術(shù)方案中,優(yōu)選地,所述當(dāng)前托管內(nèi)存信息輸出模塊分析并輸出當(dāng)前托 管內(nèi)存信息的操作,具體包括:對(duì)比GC開(kāi)始前和結(jié)束后的托管內(nèi)存對(duì)象,分析哪些對(duì)象被 頻繁的回收和創(chuàng)建;同時(shí),對(duì)比垃圾回收期間性能計(jì)數(shù)器中的%Time In GC情況,即可知道 哪些對(duì)象被頻繁的回收和創(chuàng)建、對(duì)內(nèi)存的影響、以及由此產(chǎn)生的CPU影響。在該技術(shù)方案 中,通過(guò)對(duì)比性能計(jì)數(shù)器數(shù)據(jù),即可知道CPU中花在GC上的時(shí)間,通過(guò)連續(xù)分析,即可知道 哪一部分對(duì)象被頻繁的回收和創(chuàng)建,影響性能了。
[0017] 通過(guò)以上技術(shù)方案,可以在現(xiàn)有的基于垃圾回收的內(nèi)存分析基礎(chǔ)上,充分利用現(xiàn) 有代碼完成準(zhǔn)確評(píng)估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生影響的內(nèi)存分析優(yōu)化,建立現(xiàn)有代 碼參與的準(zhǔn)確評(píng)估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生影響的通用、統(tǒng)一分析優(yōu)化思路。
【專利附圖】
【附圖說(shuō)明】
[0018] 圖1示出了根據(jù)本發(fā)明的實(shí)施例的基于垃圾回收的內(nèi)存分析優(yōu)化方法的流程圖; 圖2示出了根據(jù)本發(fā)明的實(shí)施例的附加到目標(biāo)進(jìn)程的流程圖; 圖3示出了根據(jù)本發(fā)明的實(shí)施例的分析并輸出當(dāng)前托管內(nèi)存信息的流程圖; 圖4示出了根據(jù)本發(fā)明的實(shí)施例的基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng)的框圖。
【具體實(shí)施方式】
[0019] 為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和具體實(shí) 施方式對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)的實(shí)施 例及實(shí)施例中的特征可以相互組合。
[0020] 在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可 以采用其他不同于在此描述的其他方式來(lái)實(shí)施,因此,本發(fā)明的保護(hù)范圍并不受下面公開(kāi) 的具體實(shí)施例的限制。
[0021] 圖1示出了根據(jù)本發(fā)明的實(shí)施例的基于垃圾回收的內(nèi)存分析優(yōu)化方法的流程圖。
[0022] 如圖1所示,根據(jù)本發(fā)明的實(shí)施例的基于垃圾回收的內(nèi)存分析優(yōu)化方法,包括:步 驟102 :將當(dāng)前托管內(nèi)存的垃圾回收附加到目標(biāo)進(jìn)程;步驟104 :基于步驟102附加到目標(biāo) 程序的當(dāng)前托管內(nèi)存的垃圾回收,為該垃圾回收的開(kāi)始和該垃圾回收的結(jié)束設(shè)置斷點(diǎn);步 驟108 :在步驟104設(shè)置的斷點(diǎn)觸發(fā)時(shí),分析并輸出當(dāng)前托管內(nèi)存信息。在該技術(shù)方案中, 通過(guò)為垃圾回收的開(kāi)始和結(jié)束設(shè)置斷點(diǎn),在斷點(diǎn)觸發(fā)時(shí),收集當(dāng)前的內(nèi)存對(duì)象,即可比對(duì)出 每一次垃圾回收哪些對(duì)象被回收掉了;從而實(shí)現(xiàn)不對(duì)現(xiàn)有代碼進(jìn)行修改的情況下,準(zhǔn)確評(píng) 估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生的影響,簡(jiǎn)化了內(nèi)存分析優(yōu)化的操作,減少了內(nèi)存分 析優(yōu)化的時(shí)間。
[0023] 在上述技術(shù)方案中,優(yōu)選地,在步驟104和步驟108之間,還包括:步驟106 :在步 驟104設(shè)置的斷點(diǎn)觸發(fā)時(shí),記錄當(dāng)前托管內(nèi)存信息;以及,步驟108具體包括:在步驟104設(shè) 置的斷點(diǎn)觸發(fā)時(shí),基于步驟106記錄的當(dāng)前托管內(nèi)存信息,分析并輸出當(dāng)前托管內(nèi)存信息。 在該技術(shù)方案中,可以記錄并存儲(chǔ)當(dāng)前托管內(nèi)存信息,為分析并輸出當(dāng)前托管內(nèi)存信息、以 及后期的查詢提供依據(jù)。
[0024] 在上述技術(shù)方案中,優(yōu)選地,如圖2所示,步驟102將當(dāng)前托管內(nèi)存的垃圾回收附 加到目標(biāo)進(jìn)程的操作,具體包括:步驟202 :設(shè)置基于當(dāng)前托管內(nèi)存的垃圾回收的調(diào)試器和 性能計(jì)數(shù)器;步驟204 :將步驟202設(shè)置的調(diào)試器附加到目標(biāo)進(jìn)程,準(zhǔn)備開(kāi)始調(diào)試,打開(kāi)步驟 202設(shè)置的性能計(jì)數(shù)器,收集%Time In GC。在該技術(shù)方案中,通過(guò)預(yù)先設(shè)置調(diào)試器和性能 計(jì)數(shù)器,可以方便當(dāng)前托管內(nèi)存信息的分析和處理。
[0025] 在上述技術(shù)方案中,優(yōu)選地,步驟104為該垃圾回收的開(kāi)始和該垃圾回收的結(jié)束 設(shè)置斷點(diǎn)的操作,具體包括:在GCHeap的SuspendEE和RestartEE方法上設(shè)置斷點(diǎn),這兩個(gè) 方法對(duì)應(yīng)垃圾回收的開(kāi)始和結(jié)束。在該技術(shù)方案中,通過(guò)設(shè)置斷點(diǎn),對(duì)垃圾回收的開(kāi)始和結(jié) 束作標(biāo)記,使得當(dāng)前內(nèi)存托管信息的分析處理有據(jù)可尋,且不易出錯(cuò)。
[0026] 在上述技術(shù)方案中,優(yōu)選地,如圖3所示,步驟108分析并輸出當(dāng)前托管內(nèi)存信息 的操作,具體包括:步驟302 :對(duì)比垃圾回收(即GC)開(kāi)始前和結(jié)束后的托管內(nèi)存對(duì)象,分析 哪些對(duì)象被頻繁的回收和創(chuàng)建;步驟304 :與步驟302同時(shí)進(jìn)行,對(duì)比垃圾回收期間性能計(jì) 數(shù)器中的%Time In GC情況,即可知道哪些對(duì)象被頻繁的回收和創(chuàng)建、對(duì)內(nèi)存的影響、以及 由此產(chǎn)生的CPU影響。在該技術(shù)方案中,通過(guò)對(duì)比性能計(jì)數(shù)器數(shù)據(jù),即可知道CPU中花在GC 上的時(shí)間,通過(guò)連續(xù)分析,即可知道哪一部分對(duì)象被頻繁的回收和創(chuàng)建,影響性能了。
[0027] 圖4示出了根據(jù)本發(fā)明的實(shí)施例的基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng)的框圖。
[0028] 如圖4所示,根據(jù)本發(fā)明的實(shí)施例的基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng)400,包 括:目標(biāo)進(jìn)程附加模塊402,用于將當(dāng)前托管內(nèi)存的垃圾回收附加到目標(biāo)進(jìn)程;斷點(diǎn)設(shè)置模 塊404,用于基于目標(biāo)進(jìn)程附加模塊402附加到目標(biāo)程序的當(dāng)前托管內(nèi)存的垃圾回收,為該 垃圾回收的開(kāi)始和該垃圾回收的結(jié)束設(shè)置斷點(diǎn);當(dāng)前托管內(nèi)存信息輸出模塊408,用于在 斷點(diǎn)設(shè)置模塊404設(shè)置的斷點(diǎn)觸發(fā)時(shí),分析并輸出當(dāng)前托管內(nèi)存信息。在該技術(shù)方案中,通 過(guò)為垃圾回收的開(kāi)始和結(jié)束設(shè)置斷點(diǎn),在斷點(diǎn)觸發(fā)時(shí),收集當(dāng)前的內(nèi)存對(duì)象,即可比對(duì)出每 一次垃圾回收哪些對(duì)象被回收掉了;從而實(shí)現(xiàn)不對(duì)現(xiàn)有代碼進(jìn)行修改的情況下,準(zhǔn)確評(píng)估 每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生的影響,簡(jiǎn)化了內(nèi)存分析優(yōu)化的操作,減少了內(nèi)存分析 優(yōu)化的時(shí)間。
[0029] 在上述技術(shù)方案中,優(yōu)選地,上述基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng),還包括:當(dāng) 前托管內(nèi)存信息記錄模塊406,用于在斷點(diǎn)設(shè)置模塊404設(shè)置的斷點(diǎn)觸發(fā)時(shí),記錄當(dāng)前托管 內(nèi)存信息;以及,當(dāng)前托管內(nèi)存信息輸出模塊408,用于在斷點(diǎn)設(shè)置模塊404設(shè)置的斷點(diǎn)觸 發(fā)時(shí),基于當(dāng)前托管內(nèi)存信息記錄模塊406記錄的當(dāng)前托管內(nèi)存信息,分析并輸出當(dāng)前托 管內(nèi)存信息。在該技術(shù)方案中,可以記錄并存儲(chǔ)當(dāng)前托管內(nèi)存信息,為分析并輸出當(dāng)前托管 內(nèi)存信息、以及后期的查詢提供依據(jù)。
[0030] 在上述技術(shù)方案中,優(yōu)選地,設(shè)置基于當(dāng)前托管內(nèi)存的垃圾回收的調(diào)試器和性 能計(jì)數(shù)器;將設(shè)置的調(diào)試器附加到目標(biāo)進(jìn)程,準(zhǔn)備開(kāi)始調(diào)試,打開(kāi)設(shè)置的性能計(jì)數(shù)器,收 集%11!1^ In GC。在該技術(shù)方案中,通過(guò)預(yù)先設(shè)置調(diào)試器和性能計(jì)數(shù)器,可以方便當(dāng)前托管 內(nèi)存信息的分析和處理。
[0031] 在上述技術(shù)方案中,優(yōu)選地,斷點(diǎn)設(shè)置模塊為該垃圾回收的開(kāi)始和該垃圾回收的 結(jié)束設(shè)置斷點(diǎn)的操作,具體包括:在GCHeap的SuspendEE和RestartEE方法上設(shè)置斷點(diǎn),這 兩個(gè)方法對(duì)應(yīng)垃圾回收的開(kāi)始和結(jié)束。在該技術(shù)方案中,通過(guò)設(shè)置斷點(diǎn),對(duì)垃圾回收的開(kāi)始 和結(jié)束作標(biāo)記,使得當(dāng)前內(nèi)存托管信息的分析處理有據(jù)可尋,且不易出錯(cuò)。
[0032] 在上述技術(shù)方案中,優(yōu)選地,當(dāng)前托管內(nèi)存信息輸出模塊分析并輸出當(dāng)前托管內(nèi) 存信息的操作,具體包括:對(duì)比GC開(kāi)始前和結(jié)束后的托管內(nèi)存對(duì)象,分析哪些對(duì)象被頻繁 的回收和創(chuàng)建;同時(shí),對(duì)比垃圾回收期間性能計(jì)數(shù)器中的%Time In GC情況,即可知道哪些 對(duì)象被頻繁的回收和創(chuàng)建、對(duì)內(nèi)存的影響、以及由此產(chǎn)生的CPU影響。在該技術(shù)方案中,通 過(guò)對(duì)比性能計(jì)數(shù)器數(shù)據(jù),即可知道CPU中花在GC上的時(shí)間,通過(guò)連續(xù)分析,即可知道哪一部 分對(duì)象被頻繁的回收和創(chuàng)建,影響性能了。
[0033] 本發(fā)明的技術(shù)方案,可以解決的核心問(wèn)題為:⑴不對(duì)現(xiàn)有代碼進(jìn)行修改;⑵準(zhǔn)確 評(píng)估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生的影響。本發(fā)明的技術(shù)方案,解決該核心問(wèn)題后,即 可進(jìn)行技術(shù)方案的廣泛應(yīng)用,同時(shí)準(zhǔn)確評(píng)估垃圾回收對(duì)系統(tǒng)性能產(chǎn)生的影響。
[0034] 例如,本發(fā)明的技術(shù)方案,可以在.net應(yīng)用程序中,為垃圾回收的開(kāi)始和結(jié)束設(shè) 置斷點(diǎn),在斷點(diǎn)觸發(fā)時(shí),收集當(dāng)前的內(nèi)存對(duì)象,即可比對(duì)出每一次垃圾回收哪些對(duì)象被回收 掉了。再對(duì)比性能計(jì)數(shù)器數(shù)據(jù),即可知道CPU中花在GC上的時(shí)間,通過(guò)連續(xù)分析,即可知道 哪一部分對(duì)象被頻繁的回收和創(chuàng)建,影響性能了。具體說(shuō)明如下: ⑴開(kāi)始調(diào)試:將調(diào)試器附加到目標(biāo)進(jìn)程,準(zhǔn)備開(kāi)始調(diào)試,打開(kāi)性能計(jì)數(shù)器,收集%Time In GC〇
[0035] ⑵輸出設(shè)置:在GCHeap的SuspendEE和RestartEE方法上設(shè)置斷點(diǎn),這兩個(gè)方法 對(duì)應(yīng)垃圾回收的開(kāi)始和結(jié)束。
[0036] ⑶收集日志:當(dāng)斷點(diǎn)觸發(fā)時(shí),記錄下當(dāng)前的托管內(nèi)存情況。
[0037] ⑷輸出分析:對(duì)比GC開(kāi)始前和結(jié)束后的托管內(nèi)存對(duì)象,分析哪些對(duì)象被頻繁的回 收和創(chuàng)建,同時(shí)對(duì)比垃圾回收期間性能計(jì)數(shù)器中的%Time In GC情況,即可知道哪些對(duì)象被 頻繁的回收和創(chuàng)建,對(duì)內(nèi)存的影響,以及由此產(chǎn)生的CPU影響。
[0038] 由于GC零代堆回收最頻繁,基于以上技術(shù)方案,我們可以只分析零代堆中的對(duì) 象,查看哪些對(duì)象被頻繁的回收和創(chuàng)建。使用如下命令: bp clr!WKS::GCHeap::SuspendEE 〃· if (dwo(clrlWKS::GCHeap::GcCondemnedGenera tion)==0) {.echo start of gen 2;!dumpheap _stat;g} . else {gc}〃 bp clr!WKS::GCHeap:: RestartEE if (dwo(clrlffKS::GCHeap::GcCondemnedGener ation)==0) {.echo end of gen 2;!dumpheap - stat;g} . else {gc}〃 通過(guò)上面的調(diào)試命令,我們就可以拿到在垃圾回收一代堆發(fā)生前和發(fā)生后,托管內(nèi)存 的使用狀態(tài),通過(guò)!dumpheap -stat命令的對(duì)比,即可知道到底是哪部分一代堆對(duì)象被頻 繁的創(chuàng)建和回收掉了。
[0039] 本發(fā)明的技術(shù)方案,可以應(yīng)用于分析系統(tǒng)中內(nèi)存分配回收數(shù)據(jù)對(duì)性能的影響,該 回收數(shù)據(jù)是內(nèi)存優(yōu)化的關(guān)鍵數(shù)據(jù)。所有基于Microsoft, net技術(shù)開(kāi)發(fā)的軟件均可使用本發(fā) 明的技術(shù)方案進(jìn)行內(nèi)存優(yōu)化與分析。本發(fā)明的技術(shù)方案不同于傳統(tǒng)的內(nèi)存優(yōu)化思路,以垃 圾回收數(shù)據(jù)為基礎(chǔ),快速診斷對(duì)系統(tǒng)性能產(chǎn)生影響的內(nèi)存分配操作。
[0040] 例如,本發(fā)明的技術(shù)方案,經(jīng)在本 申請(qǐng)人:應(yīng)用驗(yàn)證,可以解決大量?jī)?nèi)存優(yōu)化問(wèn)題, 如重慶長(zhǎng)軸項(xiàng)目的CPU使用率優(yōu)化。
[0041] 以上結(jié)合附圖詳細(xì)說(shuō)明了本發(fā)明的技術(shù)方案,考慮到相關(guān)技術(shù)中沒(méi)有不改變現(xiàn)有 代碼、準(zhǔn)確評(píng)估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生影響的針對(duì)垃圾回收的內(nèi)存分析優(yōu)化的 解決辦法?,F(xiàn)有的基于垃圾回收的內(nèi)存分析無(wú)法完成有現(xiàn)有代碼參與的準(zhǔn)確評(píng)估每次垃圾 回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生影響的內(nèi)存分析優(yōu)化過(guò)程。因此,本發(fā)明提出了一種基于垃圾回 收的內(nèi)存分析優(yōu)化方法和一種基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng),可以在現(xiàn)有的基于垃圾 回收的內(nèi)存分析基礎(chǔ)上,充分利用現(xiàn)有代碼完成準(zhǔn)確評(píng)估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn) 生影響的內(nèi)存分析優(yōu)化,建立現(xiàn)有代碼參與的準(zhǔn)確評(píng)估每次垃圾回收過(guò)程對(duì)系統(tǒng)性能產(chǎn)生 影響的通用、統(tǒng)一分析優(yōu)化思路。
[0042] 以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技 術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修 改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1. 一種基于垃圾回收的內(nèi)存分析優(yōu)化方法,其特征在于,包括: 步驟102 :將當(dāng)前托管內(nèi)存的垃圾回收附加到目標(biāo)進(jìn)程; 步驟104 :基于步驟102附加到目標(biāo)程序的當(dāng)前托管內(nèi)存的垃圾回收,為該垃圾回收的 開(kāi)始和該垃圾回收的結(jié)束設(shè)置斷點(diǎn); 步驟108 :在步驟104設(shè)置的斷點(diǎn)觸發(fā)時(shí),分析并輸出當(dāng)前托管內(nèi)存信息。
2. 根據(jù)權(quán)利要求1所述的基于垃圾回收的內(nèi)存分析優(yōu)化方法,其特征在于,在所述步 驟104和步驟108之間,還包括: 步驟106 :在步驟104設(shè)置的斷點(diǎn)觸發(fā)時(shí),記錄當(dāng)前托管內(nèi)存信息;以及, 所述步驟108具體包括: 在步驟104設(shè)置的斷點(diǎn)觸發(fā)時(shí),基于步驟106記錄的當(dāng)前托管內(nèi)存信息,分析并輸出當(dāng) 前托管內(nèi)存信息。
3. 根據(jù)權(quán)利要求1或2所述的基于垃圾回收的內(nèi)存分析優(yōu)化方法,其特征在于,所述步 驟102將當(dāng)前托管內(nèi)存的垃圾回收附加到目標(biāo)進(jìn)程的操作,具體包括: 步驟202 :設(shè)置基于當(dāng)前托管內(nèi)存的垃圾回收的調(diào)試器和性能計(jì)數(shù)器; 步驟204 :將步驟202設(shè)置的調(diào)試器附加到目標(biāo)進(jìn)程,準(zhǔn)備開(kāi)始調(diào)試,打開(kāi)步驟202設(shè) 置的性能計(jì)數(shù)器,收集%Time In GC。
4. 根據(jù)權(quán)利要求1或2所述的基于垃圾回收的內(nèi)存分析優(yōu)化方法,其特征在于,所述步 驟104為該垃圾回收的開(kāi)始和該垃圾回收的結(jié)束設(shè)置斷點(diǎn)的操作,具體包括: 在GCHeap的SuspendEE和RestartEE方法上設(shè)置斷點(diǎn),這兩個(gè)方法對(duì)應(yīng)垃圾回收的開(kāi) 始和結(jié)束。
5. 根據(jù)權(quán)利要求1或2所述的基于垃圾回收的內(nèi)存分析優(yōu)化方法,其特征在于,所述步 驟108分析并輸出當(dāng)前托管內(nèi)存信息的操作,具體包括: 步驟302 :對(duì)比GC開(kāi)始前和結(jié)束后的托管內(nèi)存對(duì)象,分析哪些對(duì)象被頻繁的回收和創(chuàng) 建; 步驟304 :與步驟302同時(shí)進(jìn)行,對(duì)比垃圾回收期間性能計(jì)數(shù)器中的%Time In GC情況, 即可知道哪些對(duì)象被頻繁的回收和創(chuàng)建、對(duì)內(nèi)存的影響、以及由此產(chǎn)生的CPU影響。
6. -種基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng),其特征在于,包括: 目標(biāo)進(jìn)程附加模塊,用于將當(dāng)前托管內(nèi)存的垃圾回收附加到目標(biāo)進(jìn)程; 斷點(diǎn)設(shè)置模塊,用于基于所述目標(biāo)進(jìn)程附加模塊附加到目標(biāo)程序的當(dāng)前托管內(nèi)存的垃 圾回收,為該垃圾回收的開(kāi)始和該垃圾回收的結(jié)束設(shè)置斷點(diǎn); 當(dāng)前托管內(nèi)存信息輸出模塊,用于在所述斷點(diǎn)設(shè)置模塊設(shè)置的斷點(diǎn)觸發(fā)時(shí),分析并輸 出當(dāng)前托管內(nèi)存信息。
7. 根據(jù)權(quán)利要求6所述的基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng),其特征在于,還包括: 當(dāng)前托管內(nèi)存信息記錄模塊,用于在所述斷點(diǎn)設(shè)置模塊設(shè)置的斷點(diǎn)觸發(fā)時(shí),記錄當(dāng)前 托管內(nèi)存信息;以及, 所述當(dāng)前托管內(nèi)存信息輸出模塊,用于在所述斷點(diǎn)設(shè)置模塊設(shè)置的斷點(diǎn)觸發(fā)時(shí),基于 所述當(dāng)前托管內(nèi)存信息記錄模塊記錄的當(dāng)前托管內(nèi)存信息,分析并輸出當(dāng)前托管內(nèi)存信 肩、。
8. 根據(jù)權(quán)利要求6或7所述的基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng),其特征在于,所述目 標(biāo)進(jìn)程附加模塊將當(dāng)前托管內(nèi)存的垃圾回收附加到目標(biāo)進(jìn)程的操作,具體包括: 設(shè)置基于當(dāng)前托管內(nèi)存的垃圾回收的調(diào)試器和性能計(jì)數(shù)器; 將設(shè)置的調(diào)試器附加到目標(biāo)進(jìn)程,準(zhǔn)備開(kāi)始調(diào)試,打開(kāi)設(shè)置的性能計(jì)數(shù)器,收集%Time In GC〇
9. 根據(jù)權(quán)利要求6或7所述的基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng),其特征在于,所述斷 點(diǎn)設(shè)置模塊為該垃圾回收的開(kāi)始和該垃圾回收的結(jié)束設(shè)置斷點(diǎn)的操作,具體包括: 在GCHeap的SuspendEE和RestartEE方法上設(shè)置斷點(diǎn),這兩個(gè)方法對(duì)應(yīng)垃圾回收的開(kāi) 始和結(jié)束。
10. 根據(jù)權(quán)利要求6或7所述的基于垃圾回收的內(nèi)存分析優(yōu)化系統(tǒng),其特征在于,所述 當(dāng)前托管內(nèi)存信息輸出模塊分析并輸出當(dāng)前托管內(nèi)存信息的操作,具體包括: 對(duì)比GC開(kāi)始前和結(jié)束后的托管內(nèi)存對(duì)象,分析哪些對(duì)象被頻繁的回收和創(chuàng)建; 同時(shí),對(duì)比垃圾回收期間性能計(jì)數(shù)器中的%Time In GC情況,即可知道哪些對(duì)象被頻繁 的回收和創(chuàng)建、對(duì)內(nèi)存的影響、以及由此產(chǎn)生的CPU影響。
【文檔編號(hào)】G06F9/445GK104063245SQ201410284405
【公開(kāi)日】2014年9月24日 申請(qǐng)日期:2014年6月24日 優(yōu)先權(quán)日:2014年6月24日
【發(fā)明者】尹洪亮 申請(qǐng)人:用友優(yōu)普信息技術(shù)有限公司