• 招生咨詢(xún)熱線:4008-569-579 
  • 手機(jī)版
    用手機(jī)掃描二維碼直達(dá)商品手機(jī)版
招生咨詢(xún)熱線
4008-569-579
機(jī)構(gòu)主頁(yè) > 培訓(xùn)資料 > Java培訓(xùn):編寫(xiě)GC高效代碼的3個(gè)技巧
機(jī)構(gòu)主頁(yè) > 培訓(xùn)資料>Java培訓(xùn):編寫(xiě)GC高效代碼的3個(gè)技巧

Java培訓(xùn):編寫(xiě)GC高效代碼的3個(gè)技巧

來(lái)源:廣州達(dá)內(nèi)教育        時(shí)間:2023-05-30        熱度:23℃        返回列表

  應(yīng)用程序性能直接受到垃圾收集(GC)的頻率和持續(xù)時(shí)間的影響,如果在GC策略調(diào)優(yōu)到達(dá)瓶頸后,性能的差別就會(huì)產(chǎn)生在代碼的編寫(xiě)質(zhì)量了。下面就來(lái)說(shuō)說(shuō)GC友好代碼的幾個(gè)技巧。對(duì)GC感興趣的同學(xué)可以參加java培訓(xùn),可以獲得快速有效的學(xué)習(xí)。


  技巧1:預(yù)測(cè)收集容量


  所有標(biāo)準(zhǔn)Java集合,以及大多數(shù)自定義和擴(kuò)展實(shí)現(xiàn)(如Trove和Google的Guava)都使用底層數(shù)組(基于原語(yǔ)或基于對(duì)象)。由于數(shù)組在分配后大小是不可變的,因此在許多情況下,向集合中添加項(xiàng)可能會(huì)導(dǎo)致刪除舊的底層數(shù)組,而選擇新分配的較大數(shù)組。


  大多數(shù)集合實(shí)現(xiàn)都試圖優(yōu)化此重新分配過(guò)程,并將其保持在攤銷(xiāo)最小值,即使未提供集合的預(yù)期大小。但是,通過(guò)在構(gòu)建時(shí)為集合提供其預(yù)期大小,可以實(shí)現(xiàn)最佳效果。


  技巧2:直接處理流程


  在處理數(shù)據(jù)流時(shí),例如從文件讀取的數(shù)據(jù)或通過(guò)網(wǎng)絡(luò)下載的數(shù)據(jù),通常會(huì)看到以下內(nèi)容:




  然后,可以將生成的字節(jié)數(shù)組解析為XML文檔、JSON對(duì)象或協(xié)議緩沖區(qū)消息,以列舉一些流行選項(xiàng)。


  在處理大型文件或大小不可預(yù)測(cè)的文件時(shí),這顯然是一個(gè)壞主意,因?yàn)槿绻鸍VM無(wú)法實(shí)際分配整個(gè)文件大小的緩沖區(qū),它會(huì)使我們暴露出OutOfMemory錯(cuò)誤。在java培訓(xùn)中,有很多關(guān)于GC的培訓(xùn)課程,在專(zhuān)業(yè)老師的教學(xué)指導(dǎo)下,可以很全面地掌握GC的相關(guān)知識(shí)和技能。


  更好的方法是使用適當(dāng)?shù)腎nputStream(本例中為FileInputStream)并將其直接提供給解析器,而無(wú)需首先將整個(gè)內(nèi)容讀入字節(jié)數(shù)組。所有主要庫(kù)都公開(kāi)API以直接解析流,例如:




  技巧3:使用不可變對(duì)象


  不變性有許多優(yōu)點(diǎn)。它對(duì)垃圾收集的影響很少得到應(yīng)有的關(guān)注。


  不可變對(duì)象是一個(gè)對(duì)象,其字段(在本例中特別是非基本字段)在對(duì)象構(gòu)造后無(wú)法修改。


  不變性意味著不可變?nèi)萜饕玫乃袑?duì)象都是在容器構(gòu)造完成之前創(chuàng)建的。在GC術(shù)語(yǔ)中:容器至少和它所持有的最年輕引用一樣年輕。這意味著,當(dāng)對(duì)年輕代執(zhí)行垃圾收集循環(huán)時(shí),GC可以跳過(guò)位于較老代中的不可變對(duì)象,因?yàn)樗_定這些對(duì)象不能引用正在收集的代中的任何對(duì)象。


  要掃描的對(duì)象越少意味著要掃描的內(nèi)存頁(yè)越少,而要掃描的內(nèi)存頁(yè)越少意味著GC周期越短,這意味著GC暫停時(shí)間越短,總體吞吐量越好。想學(xué)習(xí)java技術(shù)的同學(xué),不妨報(bào)個(gè)Java培訓(xùn)班,有明確清晰的學(xué)習(xí)路線,理論知識(shí)+實(shí)戰(zhàn)操作,可以獲得快速提升。

電話咨詢(xún)

電話咨詢(xún)

咨詢(xún)電話:
4008-569-579
回到頂部

回到頂部