精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

優秀的Java程序員必須了解的GC哪些

開發 后端
本篇文章首先簡單介紹GC的工作原理之后,然后再對GC的幾個關鍵問題進行深入探討,最后提出一些Java程序設計建議,從GC角度提高Java程序的性能。

[[383298]]

 一個優秀的Java程序員必須了解GC的工作原理、如何優化GC的性能、如何與GC進行有限的交互,因為有一些應用程序對性能要求較高,例如嵌入式系統、實時系統等,只有全面提升內存的管理效率 ,才能提高整個應用程序的性能。

一個優秀的Java程序員必須了解GC的工作原理、如何優化GC的性能、如何與GC進行有限的交互,因為有一些應用程序對性能要求較高,例如嵌入式系統、實時系統等,只有全面提升內存的管理效率 ,才能提高整個應用程序的性能。本篇文章首先簡單介紹GC的工作原理之后,然后再對GC的幾個關鍵問題進行深入探討,最后提出一些Java程序設計建議,從GC角度提高Java程序的性能。

GC的基本原理

Java的內存管理實際上就是對象的管理,其中包括對象的分配和釋放。

對于程序員來說,分配對象使用new關鍵字;釋放對象時,只要將對象所有引用賦值為null,讓程序不能夠再訪問到這個對象,我們稱該對象為"不可達的".GC將負責回收所有"不可達"對象的內存空間。

對于GC來說,當程序員創建對象時,GC就開始監控這個對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達的",哪些對象是"不可達的".當GC確定一些對象為"不可達"時,GC就有責任回收這些內存空間。

但是,為了保證GC能夠在不同平臺實現的問題,Java規范對GC的很多行為都沒有進行嚴格的規定。例如,對于采用什么類型的回收算法、什么時候進行回收等重要問題都沒有明確的規定。因此,不同的JVM的實現者往往有不同的實現算法。這也給Java程序員的開發帶來行多不確定性。本文研究了幾個與GC工作相關的問題,努力減少這種不確定性給Java程序帶來的負面影響。

增量式GC( Incremental GC )

GC在JVM中通常是由一個或一組進程來實現的,它本身也和用戶程序一樣占用heap空間,運行時也占用CPU.當GC進程運行時,應用程序停止運行。因此,當GC運行時間較長時,用戶能夠感到 Java程序的停頓,另外一方面,如果GC運行時間太短,則可能對象回收率太低,這意味著還有很多應該回收的對象沒有被回收,仍然占用大量內存。

因此,在設計GC的時候,就必須在停頓時間和回收率之間進行權衡。一個好的GC實現允許用戶定義自己所需要的設置,例如有些內存有限有設備,對內存的使用量非常敏感,希望GC能夠準確的回收內存,它并不在意程序速度的放慢。

另外一些實時網絡游戲,就不能夠允許程序有長時間的中斷。增量式GC就是通過一定的回收算法,把一個長時間的中斷,劃分為很多個小的中斷,通過這種方式減少GC對用戶程序的影響。雖然,增量式GC在整體性能上可能不如普通GC的效率高,但是它能夠減少程序的最長停頓時間。

Sun JDK提供的HotSpot JVM就能支持增量式GC.HotSpot JVM缺省GC方式為不使用增量GC,為了啟動增量GC,我們必須在運行Java程序時增加-Xincgc的參數。

HotSpot JVM增量式GC的實現是采用Train GC算法。它的基本想法就是,將堆中的所有對象按照創建和使用情況進行分組(分層),將使用頻繁高和具有相關性的對象放在一隊中,隨著程序的運行,不斷對組進行調整。當GC運行時,它總是先回收最老的(最近很少訪問的)的對象,如果整組都為可回收對象,GC將整組回收。這樣,每次GC運行只回收一定比例的不可達對象,保證程序的順暢運行。

詳解finalize函數

finalize是位于Object類的一個方法,該方法的訪問修飾符為protected,由于所有類為Object的子類,因此用戶類很容易訪問到這個方法。由于,finalize函數沒有自動實現鏈式調用,我們必須手動的實現,因此finalize函數的最后一個語句通常是super.finalize()。通過這種方式,我們可以實現從下到上實現finalize的調用,即先釋放自己的資源,然后再釋放父類的資源。

根據Java語言規范,JVM保證調用finalize函數之前,這個對象是不可達的,但是JVM不保證這個函數一定會被調用。另外,規范還保證finalize函數最多運行一次。

很多Java初學者會認為這個方法類似與C++中的析構函數,將很多對象、資源的釋放都放在這一函數里面。其實,這不是一種很好的方式。原因有三,其一,GC為了能夠支持finalize函數,要對覆蓋這個函數的對象作很多附加的工作。其二,在finalize運行完成之后,該對象可能變成可達的,GC還要再檢查一次該對象是否是可達的。因此,使用 finalize會降低GC的運行性能。其三,由于GC調用finalize的時間是不確定的,因此通過這種方式釋放資源也是不確定的。

通常,finalize用于一些不容易控制、并且非常重要資源的釋放,例如一些I/O的操作,數據的連接。這些資源的釋放對整個應用程序是非常關鍵的。在這種情況下,程序員應該以通過程序本身管理(包括釋放)這些資源為主,以finalize函數釋放資源方式為輔,形成一種雙保險的管理機制,而不應該僅僅依靠finalize來釋放資源。

下面給出一個例子說明,finalize函數被調用以后,仍然可能是可達的,同時也可說明一個對象的finalize只可能運行一次。 

  1.  1 class MyObject{  
  2.  2   
  3.  3 Test main; //記錄Test對象,在finalize中時用于恢復可達性  
  4.  4   
  5.  5 public MyObject(Test t)  
  6.  6   
  7.  7 {  
  8.  8  
  9.  9 main=t; //保存Test 對象  
  10. 10   
  11. 11 }  
  12. 12   
  13. 13 protected void finalize()  
  14. 14   
  15. 15 {  
  16. 16   
  17. 17 main.ref=this;// 恢復本對象,讓本對象可達  
  18. 18   
  19. 19 System.out.println("This is finalize");//用于測試finalize只運行一次  
  20. 20   
  21. 21 }  
  22. 22   
  23. 23 }  
  24. 24   
  25. 25 class Test {  
  26. 26   
  27. 27 MyObject ref;  
  28. 28   
  29. 29 public static void main(String[] args) {  
  30. 30   
  31. 31 Test test=new Test();  
  32. 32   
  33. 33 test.ref=new MyObject(test);  
  34. 34   
  35. 35 test.ref=null; //MyObject對象為不可達對象,finalize將被調用  
  36. 36   
  37. 37 System.gc();  
  38. 38   
  39. 39 if (test.ref!=null) System.out.println("My Object還活著");  
  40. 40   
  41. 41 }  
  42. 42   
  43. 43 }  
  44. 44   
  45. 45 運行結果:  
  46. 46   
  47. 47 This is finalize  
  48. 48   
  49. 49 MyObject還活著 

此例子中,需要注意的是雖然MyObject對象在finalize中變成可達對象,但是下次回收時候,finalize卻不再被調用,因為finalize函數最多只調用一次。

程序如何與GC進行交互

Java2增強了內存管理功能,增加了一個java.lang.ref包,其中定義了三種引用類。這三種引用類分別為SoftReference、WeakReference和 PhantomReference.通過使用這些引用類,程序員可以在一定程度與GC進行交互,以便改善GC的工作效率。這些引用類的引用強度介于可達對象和不可達對象之間。

創建一個引用對象也非常容易,例如如果你需要創建一個Soft Reference對象,那么首先創建一個對象,并采用普通引用方式(可達對象);然后再創建一個SoftReference引用該對象;最后將普通引用設置為null.通過這種方式,這個對象就只有一個Soft Reference引用。同時,我們稱這個對象為Soft Reference 對象。

Soft Reference的主要特點是據有較強的引用功能。只有當內存不夠的時候,才進行回收這類內存,因此在內存足夠的時候,它們通常不被回收。另外,這些引用對象還能保證在Java拋出OutOfMemory 異常之前,被設置為null.它可以用于實現一些常用圖片的緩存,實現Cache的功能,保證最大限度的使用內存而不引起OutOfMemory.以下給出這種引用類型的使用偽代碼; 

  1.  1 //申請一個圖像對象  
  2.  2   
  3.  3 Image image=new Image();//創建Image對象  
  4.  4   
  5.  5 …  
  6.  6   
  7.  7 //使用 image  
  8.  8   
  9.  9 …  
  10. 10   
  11. 11 //使用完了image,將它設置為soft 引用類型,并且釋放強引用;  
  12. 12  
  13. 13 SoftReference sr=new SoftReference(image);  
  14. 14   
  15. 15 image=null 
  16. 16   
  17. 17 …  
  18. 18   
  19. 19 //下次使用時  
  20. 20   
  21. 21 if (sr!=null) image=sr.get();  
  22. 22   
  23. 23 else{  
  24. 24   
  25. 25 //由于GC由于低內存,已釋放image,因此需要重新裝載; 
  26. 26   
  27. 27 image=new Image();  
  28. 28   
  29. 29 sr=new SoftReference(image);  
  30. 30   
  31. 31 } 

Weak引用對象與Soft引用對象的最大不同就在于:GC在進行回收時,需要通過算法檢查是否回收Soft引用對象,而對于Weak引用對象,GC總是進行回收。Weak引用對象更容易、更快被 GC回收。雖然,GC在運行時一定回收Weak對象,但是復雜關系的Weak對象群常常需要好幾次GC的運行才能完成。Weak引用對象常常用于Map結構中,引用數據量較大的對象,一旦該對象的強引用為null時,GC能夠快速地回收該對象空間。

Phantom引用的用途較少,主要用于輔助 finalize函數的使用。Phantom對象指一些對象,它們執行完了finalize函數,并為不可達對象,但是它們還沒有被GC回收。這種對象可以輔助finalize進行一些后期的回收工作,我們通過覆蓋Reference的clear()方法,增強資源回收機制的靈活性。

一些Java編碼的建議

根據GC的工作原理,我們可以通過一些技巧和方式,讓GC運行更加有效率,更加符合應用程序的要求。以下就是一些程序設計的幾點建議。

1.最基本的建議就是盡早釋放無用對象的引用。大多數程序員在使用臨時變量的時候,都是讓引用變量在退出活動域(scope)后,自動設置為null.我們在使用這種方式時候,必須特別注意一些復雜的對象圖,例如數組,隊列,樹,圖等,這些對象之間有相互引用關系較為復雜。對于這類對象,GC回收它們一般效率較低。如果程序允許,盡早將不用的引用對象賦為null.這樣可以加速GC的工作。

2.盡量少用finalize函數。finalize函數是Java提供給程序員一個釋放對象或資源的機會。但是,它會加大GC的工作量,因此盡量少采用finalize方式回收資源。

3.如果需要使用經常使用的圖片,可以使用soft應用類型。它可以盡可能將圖片保存在內存中,供程序調用,而不引起OutOfMemory.

4.注意集合數據類型,包括數組,樹,圖,鏈表等數據結構,這些數據結構對GC來說,回收更為復雜。另外,注意一些全局的變量,以及一些靜態變量。這些變量往往容易引起懸掛對象(dangling reference),造成內存浪費。

5.當程序有一定的等待時間,程序員可以手動執行System.gc(),通知GC運行,但是Java語言規范并不保證GC一定會執行。使用增量式GC可以縮短Java程序的暫停時間。 

 

責任編輯:龐桂玉 來源: JAVA高級架構
相關推薦

2009-06-15 10:43:45

Java程序員Java程序GC

2017-11-14 21:30:15

2024-03-20 17:35:42

2009-07-03 16:07:58

2020-03-29 08:19:56

程序員代碼

2015-06-17 14:24:48

優秀程序員整潔代碼

2021-05-29 07:32:14

優秀程序員代碼

2012-05-25 10:54:24

程序員

2018-08-13 13:56:24

2015-10-12 08:56:37

程序員成長法則

2020-03-09 11:14:25

程序員技術設計

2014-08-29 11:09:44

程序員

2018-07-02 10:15:11

Java程序員注解

2015-03-24 14:11:41

程序員

2013-07-09 15:26:29

程序員算法

2016-01-21 10:05:31

程序員設計師

2013-08-05 09:55:47

程序員

2009-11-19 10:21:02

2014-03-25 10:35:35

程序員代碼調試

2014-11-19 15:26:00

程序員
點贊
收藏

51CTO技術棧公眾號

免费视频久久久| 日韩免费福利电影在线观看| 国产亚洲成av人片在线观看桃| 人偷久久久久久久偷女厕| 亚洲欧美一区二区三区四区五区| 成人免费看黄| 欧美在线网址| 欧美日韩视频第一区| 国产欧美在线一区二区| 国产美女福利视频| 国产黄色精品| 久久久精品免费网站| 久久69精品久久久久久久电影好| 亚洲福利精品视频| 天堂影院在线| 欧美绝顶高潮抽搐喷水合集| ㊣最新国产の精品bt伙计久久| 97久久国产精品| 免费看三级黄色片| 久草资源在线| 久久99精品久久久久婷婷| 亚洲人成五月天| 妞干网在线观看视频| 草逼视频免费看| 艳女tv在线观看国产一区| 在线观看国产91| 日本亚洲导航| 亚洲第一页在线观看| 欧美96在线丨欧| 一本一道久久a久久精品逆3p| 欧美黄色一级片视频| 欧美另类自拍| 久久激情久久| 亚洲精品视频在线播放| 欧美一级在线看| 天天舔天天干天天操| 在线精品亚洲| 亚洲成人教育av| 大伊香蕉精品视频在线| 欧美一级特黄aaaaaa大片在线观看| 好看不卡的中文字幕| 亚洲第一黄色网| 人妻激情偷乱视频一区二区三区| 欧美激情成人动漫| 不卡视频在线观看| 日韩免费观看在线观看| 少妇精品无码一区二区免费视频| 在线观看涩涩| 欧美经典一区二区| 国产在线视频不卡| 久久久无码精品亚洲国产| 91免费精品国偷自产在线在线| 亚洲影视资源网| 精品国产一区二区三区免费| 精品久久久久久久久久久久久久久久| 精品国产91乱码一区二区三区四区 | 日韩欧美视频一区二区三区四区 | 三级视频在线播放| 久久久久久夜| 午夜精品久久久99热福利| 国产a免费视频| 欧美日韩三级| 亚洲午夜精品视频| 成年人免费观看视频网站| 外国成人毛片| 亚洲一区二区三区国产| 91成人在线视频观看| 亚洲经典一区二区三区| 国产精品资源站在线| 欧美高清第一页| 亚洲天堂网一区二区| 欧美电影在线观看网站| 亚洲一区二区三区四区在线免费观看| gogogo免费高清日本写真| 污污网站在线免费观看| 久久成人18免费观看| 国产精品午夜视频| 久久夜色精品亚洲| 久久电影院7| 亚洲国产精品久久久久久| 午夜免费看视频| 华人av在线| 国产精品久99| 欧美日韩精品不卡| 亚洲美女性生活| 美女在线视频一区| 97超级碰碰碰久久久| 可以直接看的黄色网址| 日本久久黄色| 精品亚洲国产视频| 日韩毛片无码永久免费看| 91一区二区| 亚洲人成人99网站| 国产又粗又猛又爽又黄的视频四季| 国产精品久av福利在线观看| 在线播放国产精品二区一二区四区| 亚洲色欲综合一区二区三区| 伦理在线一区| 色天使色偷偷av一区二区| 日韩美女爱爱视频| 日韩精品99| 欧美性猛xxx| 男人的天堂avav| 成人在线观看网站| 成人黄色大片在线观看| 日本精品免费| 在线中文字幕电影| 国产精品国产成人国产三级| 波多野结衣 作品| av大全在线| 日韩欧美在线字幕| 亚洲高清av一区二区三区| 亚洲成人a级片| 欧美日韩国产小视频| 成人羞羞国产免费网站| 亚洲成人1区| 亚洲深夜福利网站| 伊人国产在线观看| 欧美三级不卡| 国产精品高潮粉嫩av| 免费看一级视频| 国产成人av自拍| 成人av免费电影| 精品免费久久久| 国产欧美一区二区在线观看| 久久精品视频16| 中文字幕 在线观看| 日韩欧美国产一区二区三区| 极品蜜桃臀肥臀-x88av| 欧美日韩色图| 国内精品久久久| 国产综合精品视频| 日日夜夜精品视频天天综合网| 日本91av在线播放| 天天天天天天天干| 久久国产综合精品| 亚洲一区二区三区四区在线播放| 国产欧美熟妇另类久久久| 国产一区二区三区国产| 成人欧美一区二区三区视频xxx| 精品国产无码AV| 国产精品国产馆在线真实露脸| 日韩福利视频在线| 国内不卡的一区二区三区中文字幕| 欧美午夜精品伦理| 亚洲天堂2024| 韩日一区二区三区| 精品国产美女在线| 国产大学生自拍| 国内不卡的二区三区中文字幕 | 在线观看国产一区二区三区| 美洲天堂一区二卡三卡四卡视频| 美媛馆国产精品一区二区| 成人在线观看一区| 欧美性色黄大片手机版| 91性高潮久久久久久久| 无需播放器亚洲| 午夜伦理精品一区| 天天操天天舔天天干| 五月婷婷激情综合| 哪个网站能看毛片| 特黄特色欧美大片| www.xxxx欧美| 国产美女免费视频| 亚洲人成亚洲人成在线观看图片| 国产精品久久久久9999爆乳| 中文字幕区一区二区三| 亚洲一级一级97网| 在线观看国产成人| 自拍偷拍国产精品| 国产伦理在线观看| 亚洲深夜福利| 114国产精品久久免费观看| 青青免费在线视频| 欧美综合在线视频| 日韩精品一区二区亚洲av性色| 国产成人h网站| 日韩av在线综合| 色偷偷综合网| 国产精品一区在线播放| 人人干在线视频| 粉嫩av一区二区三区免费野| 国产精品久久久久久久av福利| 色狼人综合干| 国产成人久久久| 欧美自拍偷拍一区二区| 日本免费在线观看| 久久久777| 亚洲欧洲精品一区| 免费亚洲电影| 色哟哟入口国产精品| 久久99精品波多结衣一区| 久久精品国产秦先生| 超碰97在线看| 亚洲欧洲一二区| 一区二区三区视频免费| 国产精品国产一区二区三区四区| 久久久久久麻豆| 免费在线观看污网站| 亚洲区欧美区| 国产一级二级三级精品| 三级成人黄色影院| 欧美美女15p| 国产精品久久一区二区三区不卡| 天天操天天干天天综合网| www久久久久久久| 成人黄色在线看| 激情黄色小视频| 99久久婷婷国产综合精品电影√| 国产成人女人毛片视频在线| 亚洲欧美在线成人| 国产亚洲视频在线观看| 性生交生活影碟片| 欧美日韩中文一区| av大片免费在线观看| 亚洲美女屁股眼交3| 日韩精品aaa| 久久久久免费av| 亚洲色图第一区| 欧美限制电影| 国产一区深夜福利| 在线亚洲人成| 高清在线视频日韩欧美| 人人干在线视频| 亚洲视频专区在线| 午夜av免费在线观看| 日韩一级完整毛片| 国产又色又爽又高潮免费| 91久久亚洲| 中国 免费 av| 水蜜桃久久夜色精品一区| 日韩aⅴ视频一区二区三区| 老牛国内精品亚洲成av人片| 68精品国产免费久久久久久婷婷| 毛片在线看片| 中文字幕亚洲一区二区三区五十路 | h片在线观看| 欧美精品一区二区三区在线播放| 永久免费看片直接| 久久久久久久精| 国产精品无码网站| av成人动漫在线观看| www.亚洲天堂网| 亚洲免费精品| 日韩福利视频| 久久99性xxx老妇胖精品| 国产剧情日韩欧美| 成人激情视屏| 国产精品一区av| 免费视频成人| 国产欧美日韩中文字幕| 四虎精品在线观看| 成人午夜激情网| 深夜成人在线| 精品国产拍在线观看| 九色porny在线| 欧美放荡办公室videos4k| 欧美xxxx黑人又粗又长| 欧美激情第6页| a国产在线视频| 欧美在线视频观看| 日本欧美韩国| 国模精品系列视频| 欧美a级在线观看| 青青草原一区二区| 成人免费毛片嘿嘿连载视频…| 国产精品男人的天堂| 国产精品69xx| 日韩在线观看免费全| www.久久ai| 中文字幕日韩欧美精品在线观看| 97最新国自产拍视频在线完整在线看| 精品福利一区二区三区免费视频| 蜜桃视频在线观看www| 亚洲精品成人久久电影| 国产在线观看精品一区| 亚洲成年人在线| 毛片免费在线| 色播久久人人爽人人爽人人片视av| 麻豆传媒视频在线观看免费| 久久99热精品这里久久精品| 日本乱码一区二区三区不卡| 国产精品福利在线| 亚洲性视频在线| 欧美精品人人做人人爱视频| 久久久久久久久99精品大| 欧美一级片免费播放| 日韩av一级片| 欧美aⅴ在线观看| 毛片一区二区三区| 最新日本中文字幕| 国产成人福利片| 免费在线观看污| 久久亚洲一区二区三区四区| 久久精品无码专区| 国产三级欧美三级| 久久精品成人av| 亚洲欧美精品午睡沙发| 91video| 日韩一本二本av| 国产鲁鲁视频在线观看免费| 欧美激情亚洲自拍| 污污片在线免费视频| 久久亚洲一区二区三区四区五区高 | 精品视频全国免费看| 午夜久久久久久久久久| 亚洲新中文字幕| 17videosex性欧美| 国产精品香蕉在线观看| 粉嫩久久久久久久极品| 亚洲日本无吗高清不卡| 欧美日韩水蜜桃| 国产综合中文字幕| 精品一区二区三区视频在线观看| 亚洲天堂成人av| 夜夜嗨av一区二区三区中文字幕 | 激情成人在线观看| 国产天堂亚洲国产碰碰| 日韩精品在线免费看| 亚洲成av人片在www色猫咪| 亚洲网站在线免费观看| 亚洲精品视频播放| 波多野结衣在线观看| 91丨九色丨国产在线| 欧美日韩黄网站| 亚洲精品8mav| 欧美专区18| 亚洲综合自拍网| 国产午夜久久久久| 日韩 欧美 亚洲| 欧美成人在线直播| 91麻豆国产福利在线观看宅福利| 国产精品丝袜高跟| 欧美亚洲高清| 久久婷五月综合| 中国av一区二区三区| 国产1区2区3区4区| 欧美精品一二三四| 丰满少妇被猛烈进入| 久久国产精彩视频| 日本在线影院| 国产精品久久久久久久天堂第1集| 伊人色**天天综合婷婷| 午夜一级免费视频| 最新日韩av在线| 国产又爽又黄又嫩又猛又粗| 日韩亚洲国产中文字幕| 欧美激情啪啪| 手机成人av在线| 激情综合网天天干| 国产女人18水真多毛片18精品| 91麻豆精品国产91久久久久| 黄色片网站在线| 亚洲伊人久久综合| 国产综合欧美| 国产xxxxxxxxx| 国产精品福利一区二区| 夜夜骚av一区二区三区| 久久精品国产久精国产一老狼| av蜜臀在线| 久久久久久九九| 综合天堂av久久久久久久| 亚洲精品乱码久久久久久动漫| 亚洲日本青草视频在线怡红院| 午夜老司机福利| 91精品国产高清自在线| 亚洲涩涩av| 337p亚洲精品色噜噜狠狠p| 国产二区国产一区在线观看| 国产人妻一区二区| 欧美丝袜丝nylons| 成人福利片网站| 国产一区二区无遮挡| 美女黄色成人网| 特一级黄色录像| 精品91自产拍在线观看一区| 欧美激情网站| 亚洲国内在线| 国产成人超碰人人澡人人澡| 天堂中文在线网| 色婷婷av一区二区三区久久| 亚洲综合影院| 九九热免费精品视频| 99riav一区二区三区| 国产精品成人免费观看| 亚洲高清在线观看| 国产精品亚洲成在人线| 精品视频在线观看一区二区| 久久亚洲一级片| 99久久精品免费看国产交换| 97精品国产91久久久久久| 不卡中文一二三区| 美女黄色一级视频| 欧美午夜电影网| 成人爽a毛片免费啪啪动漫| 日韩欧美电影一区二区| 国产成人av电影在线| 中文字幕免费高清网站| 亚洲人成在线播放| 日本精品视频|