JAVA垃圾回收機制和Python垃圾回收對比與分析

Peng__Ge發表於2018-03-08

2018/3/9更:個人理解JAVA與Python區別,若有不足,請及時指出,謝謝!

JAVA垃圾回收原理:參考JAVA程式設計思想P90-P91

JAVA垃圾回收:採用停止-複製、標記-清掃的自適應方法

首先使用停止-複製方法,停止程式,然後將存活的物件,從當前堆複製到另外一個堆,並且是一個一個緊密排列;但是複製過程是兩個堆之間來回進行,導致開銷極大,並且,可能在程式穩定後,只有少部分垃圾,但是依舊進行停止-複製的話,產生浪費;

因此,標記-清掃方法派上了用場,該方法首先從堆疊和靜態區出發,遍歷所有引用,找出所有活引用,進行標記;該過程不進行清理,當標記完所有物件之後,開始清理工作,沒有標記的物件(垃圾)就會被釋放,所以剩下的是不連續的堆空間,如果希望堆連續,垃圾回收器將重新整理堆空間(Python 用的是計數引用回收,每次引用,計數器+1,當計數為0的時候,該變數會被回收)

編譯過程:Java採用惰性評估方法,當需要裝載某個類時,編譯器會先找到.class檔案,然後將該類位元組碼裝入記憶體,惰性評估只在必要的時候才編譯程式碼;這比對所有程式碼進行編譯要節省許多消耗。

補充:JAVA與Python的區別:

1、JAVA是一種編譯型語言,需要編輯器,Python是一種指令碼性語言,需要直譯器,JAVA是一種強調資料型別的語言,而Python在這個方面是動態的,寬容的;因此JAVA能夠進行過載,而Python是不行的,因為引數執行之前的型別並沒有明確界定。

2、JAVA能夠進行多執行緒程式設計,而Python由於程式鎖的存在,無法進行多執行緒;

3、現階段國內發展情況是:JAVA主要用於web後臺開發,是主流,雖然Python有Django這樣的web框架,但是被公司運用的並不多,Python主要用於資料探勘/分析,自動化指令碼測試等,因為Python擁有強大的各類包;

若有不足之處和問題請指出,互相學習,謝謝!

歡迎轉載,註明出處。

相關文章