1.7垃圾回收機制

傳統的C/C++等編程語言,須要程序員負責回收已經分配的內存,顯式進行垃圾回收是一件比較痛苦和困難的事情。由於程序員並不老是知道內存應該什麼時候被釋放。若是一些已經分配出去的內存得不到及時的回收,就會引發系統運行速度降低,甚至致使程序癱瘓,這種現象被稱爲內存泄漏。整體而言,顯式進行垃圾回收主要有以下兩個缺點: 1.程序忘記及時回收無用內存,從而致使內存泄露,下降系統性能。 2.程序錯誤地回收系統核心內存,從而致使系統崩潰。程序員

與C/C++程序不一樣,Java語言不須要程序員直接控制內存回收,Java程序的內存分配和回收都是由JRE在後臺自動進行的。JRE會負責回收那些再也不使用的內存,這種機制被稱爲垃圾回收機制(Garbage Collection ,GC)。一般JRE會提供一個後臺線程來進行檢測和控制,通常都是在CPU空閒或內存不足時自動進行垃圾回收,而程序員沒法精確控制垃圾回收的時間和順序等。算法

Java的堆內存是一個運行時數據區,用以保存類的實例(對象),Java虛擬機的堆內存中存儲着正在運行的應用程序所創建的全部對象,這些對象不須要程序經過代碼來顯式地釋放。通常來講,對內存的回收由垃圾回收來負責,全部的JVM實現都有一個由垃圾回收器管理的堆內存。垃圾回收是一種動態存儲管理技術,它自動釋放再也不被程序引用的對象,按照特定的垃圾回收算法來實現內存資源的自動回收功能。編程

在C/C++中,對象所佔用的內存不會被自動釋放,若是程序沒有顯式釋放對象所佔用的內存,對象所佔用的內存就不能分配給其餘對象,該內存在程序結束運行以前將一直被佔用;而在Java中,當沒有引用變量指向原先分配給某個對象的內存時,該內存便成爲垃圾。JVM的一個超級線程會自動釋放該內存區。垃圾回收意味着程序再也不須要的對象是「垃圾信息」,這些信息將被丟棄。安全

當一個對象再也不被引用時,內存回收它佔領的空間,以便空間被後來的新對象使用。事實上,除了釋放沒用 的對象外,垃圾回收能夠清除內存記錄碎片。因爲建立對象和垃圾回收器釋放丟棄對象所佔用的內存空間,內存會出現碎片。碎片是分配給對象的內存塊之間的空閒內存區,碎片整理將所佔用的堆內存移到堆的一端,JVM將整理出的內存分配給新的對象。編程語言

垃圾回收能自動釋放內存空間,減輕編程的負擔。這使Java虛擬機具備兩個顯著的優勢: 1.垃圾回收機制能夠很好的提升編程效率。在沒有垃圾回收機制時,可能要花許多時間來解決一個難懂的存儲器問題。在用Java語言編程時,依靠垃圾回收機制可大大縮短期。 2.垃圾回收機制保證程序的完整性,垃圾回收是Java語言安全性策略的一個重要部分。性能

垃圾回收的一個潛在缺點是它的開銷影響程序性能。Java虛擬機必須跟蹤程序中的全部對象,才能夠肯定哪些對象是無用的對象,並最終釋放這些無用的對象。這個過程須要花費處理器的時間。其次是垃圾回收算法的不完備性,早先採用的某些垃圾回收算法就不能保證100%收集到全部的廢棄內容。線程

當編寫Java程序時,一個基本原則是:對於再也不須要的對象 ,不要引用它們。若是保持對這些對象的引用時,垃圾回收機制暫時不會回收該對象,則會致使系統可用內存愈來愈少。當系統可用內存愈來愈少時,垃圾回收執行的效率就愈來愈高,從而致使系統的性能降低。對象

相關文章
相關標籤/搜索