工作小驛

          Ninja!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            103 Posts :: 0 Stories :: 36 Comments :: 0 Trackbacks

           

             用過C++編程的人知道,編的時候總是要跟蹤所創建的對象,并且需要顯示地刪除不用的對象。這種方式太麻煩了,容易出錯。寫了那么多代碼,能記住嗎,要是把有用的給刪了怎么辦,要是有沒用的忘刪了怎么辦?這些問題是很嚴重的。在java語言中采用的垃圾收集器這種方式管理內存,就很方便也很安全了。垃圾收集器,可以自動確定哪個對象不再被利用,它可以自動將它刪除。這也是java語言的一大優勢。

              我們要想顯示的刪除一個對象的引用也很簡單,將該引用的變量賦值為null不就行了嗎?對于垃圾收集器來說,當程序員創建對象時,垃圾收集器就開始監控這個對象的地址、大小以及使用情況。通常,垃圾收集器采用有向圖的方式記錄和管理堆(heap)中的所有對 象。通過這種方式確定哪些對象是可用的,哪些對象是不可用的。當垃圾收集器確定一些對象為不可用時,垃圾收集器就回收這些內存空間。

              可是垃圾收集器卻以較低的優先級在系統空閑周期中執行,通俗一點說就是它級別低,別人不運行時候才輪到它,因此垃圾收集器的速度比較慢。有些時候我們會使用System.gc()。手動回收。這樣來提高性能。

              對于垃圾收集器來說還有一個值得一提的是finalize()這個方法,每一個對象都有一個finalize( )方法,這個方法是從Object類繼承來的。它用來回收內存以外的系統資源,就像是文件處理器和網絡連接器。該方法的調用順序和用來調用該方法的對象的創建順序是無關的。換句話說,書寫程序時該方法的順序和方法的實際調用順序是不相干的。這只是finalize( )方法的特點。還有,每個對象只能調用finalize( )方法一次。如果在finalize( )方法執行時產生異常(exception),則該對象仍可以被垃圾收集器收集。那是一定了,不能說用到finalize()了。垃圾收集器就什么也不做了啊。finalize()的工作量是很大的哦

              總結:

              java用了垃圾收集器的內存管理方式,并不是說它完全的好。有的時候會影響它的性能,我們還是要手動來收集的。但是要是像C++那樣完全手動來收集的話,那也實在是太麻煩了而且不是很安全。

            根據垃圾收集器的工作原理,我們可以通過一些技巧和方式,讓垃圾收集器運行更加有效率。

            1.最基本的建議就是盡早釋放無用對象的引用。
            大多數程序員在使用臨時變量的時候,都是讓引用變量在退出活動域(scope)后,自動設置為null
            2.盡量少用finalize函數。finalize函數是java提供給程序員一個釋放對象或資源的機會。但是,它會加大垃圾收集器的工作量,因此盡量少采用finalize方式回收資源。
            3.當程序有一定的等待時間,程序員可以手動執行System.gc(),通知垃圾收集器運行,但是java語言規范并不保證垃圾收集器一定會執行。

          posted on 2007-08-06 12:48 王君 閱讀(186) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 通江县| 萍乡市| 房产| 清新县| 武宣县| 定兴县| 稻城县| 隆尧县| 舞钢市| 大同市| 金昌市| 吴江市| 莲花县| 军事| 新竹市| 枣强县| 清水河县| 尉氏县| 龙里县| 黎城县| 靖边县| 南宫市| 准格尔旗| 西和县| 谷城县| 清水河县| 丹棱县| 浦城县| 昌宁县| 保德县| 海丰县| 宁城县| 西峡县| 紫云| 江山市| 桐梓县| 弥渡县| 深水埗区| 安义县| 永安市| 绍兴县|