生活中,我們隨處可見的就是垃圾回收站回收垃圾來重新利用,避免環境污染,而且會讓通過重新再利用這些垃圾,能夠節省能源和資源。
編程是源于生活。在java中,垃圾是會產生的,當然也會被jvm自動回收再利用。當沒有對象引用指向原先分配給某個對象的內存,該內存便成為了垃圾,那么jvm會用一個系統級線程來釋放這些內存,從而讓這塊內存空間能夠被后來的新對象使用。另外垃圾回收也可以清除內存記錄碎片。由于創建對象和垃圾回收器釋放丟棄對象所占的內存空間,內存會出現碎片。碎片是分配給對象的內存塊之間的空閑內存洞。碎片整理將所占用的堆內存移到堆的一端,JVM將整理出的內存分配給新的對象。
在java中垃圾回收機制有好有壞。
垃圾回收能自動釋放內存空間,減輕編程的負擔。這使Java 虛擬機具有一些優點。首先,它能使編程效率提高。在沒有垃圾回收機制的時候,可能要花許多時間來解決一個難懂的存儲器問題。在用Java語言編程的時候,靠垃圾回收機制可大大縮短時間。其次是它保護程序的完整性,垃圾回收是Java語言安全性策略的一個重要部份。
垃圾回收的一個潛在的缺點是它的開銷影響程序性能。Java虛擬機必須追蹤運行程序中有用的對象,而且最終釋放沒用的對象。這一個過程需要花費處理器的時間。其次垃圾回收算法的不完備性,早先采用的某些垃圾回收算法就不能保證100%收集到所有的廢棄內存。當然隨著垃圾回收算法的不斷改進以及軟硬件運行效率的不斷提升,這些問題都可以迎刃而解。
在編程的時候,可能會手動調用gc方法來呼喚垃圾回收機制來處理垃圾等操作,之所以叫呼喚是因為java的垃圾回收機制是以不定時的方式來收集垃圾的,當調用gc的時候雖然不能后讓垃圾回收機制立即來回收垃圾等操作,但是它能夠讓垃圾回收操作容易發生,或提早發生。
在垃圾回收機制中,還有一個方法叫finalize方法是需要了解的。在jvm垃圾回收器收集一個對象之前,一般要求程序調用適當的方法釋放資源,但在沒有明確釋放資源的情況下,Java提供了缺省機制來終止該對象心釋放資源,這個方法就是finalize。
其實對于java垃圾回收機制了解到這個程度就夠用了,因為在很多時候,java的垃圾回收機制其實是不用編程人員來操心的,也許在某一天你需要操心來處理java的垃圾回收機制的時候,那時候你需要認真研究一下jdk源代碼了或者找一些更加深入剖析java的書籍來幫助你。