歡迎您光臨本站 註冊首頁

Java垃圾收集器使用小訣竅

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
Java的內存管理實際上就是對象的管理,其中包括對象的分配和釋放.
對於程序員來說,分配對象使用new關鍵字;釋放對象時,只要將對象所有引用賦值為null.對於GC來說,當程序員創建對象時,GC就開始監控這個對象的地址、大小以及使用情況.通常,GC採用有向圖的方式記錄和管理堆(heap)中的所有對象.通過這種方式確定哪些對象是「可達的」,哪些對象是「不可達的」.當GC確定一些對象為「不可達」時,GC就有責任回收這些內存空間.
GC在JVM中通常是由一個或一組進程來實現的,它本身也和用戶程序一樣佔用heap空間,運行時也佔用CPU.當GC進程運行時,應用程序停止運行.
因此,當GC運行時間較長時,用戶能夠感到Java程序的停頓,另外一方面,如果GC運行時間太短,則可能對象回收率太低,這意味著還有很多應該回收的對象沒有被回收,仍然佔用大量內存.因此,在設計GC的時候,就必須在停頓時間和回收率之間進行權衡.
根據GC的工作原理,我們可以通過一些技巧和方式,讓GC運行更加有效率,更加符合應用程序的要求.
以下就是一些程序設計的幾點建議.
1、最基本的建議就是儘早釋放無用對象的引用.
大多數程序員在使用臨時變數的時候,都是讓引用變數在退出活動域(scope)后,自動設置為null.
2、盡量少用finalize函數.finalize函數是Java提供給程序員一個釋放對象或資源的機會.但是,它會加大GC的工作量,因此盡量少採用finalize方式回收資源.
3、如果需要使用經常使用的圖片,可以使用soft應用類型.它可以儘可能將圖片保存在內存中,供程序調用,而不引起OutOfMemory.
4、注意集合數據類型,包括數組,樹,圖,鏈表等數據結構,對於這類對象,GC回收它們一般效率較低.如果程序允許,儘早將不用的引用對象賦為null.這樣可以加速GC的工作.,如非必要,程序中採用的數據結構要儘可能地簡單.
5、當程序有一定的等待時間,程序員可以手動執行System.gc(),通知GC運行,但是Java語言規範並不保證GC一定會執行.
垃圾收集器在一個JAVA程序中的執行是自動的,不能強制執行,即是程序員能明確的判斷出有一塊內存已經無用了,是應該回收的,程序員也不能強制垃圾收集器回收該內存塊.希望通過本文的介紹,能夠給你帶來幫助.


[火星人 ] Java垃圾收集器使用小訣竅已經有302次圍觀

http://coctec.com/docs/java/show-post-60021.html