Java虛擬機器(JVM)和Python直譯器有什麼區別?

Tech In Pieces發表於2020-12-24

在Java中始終使用"虛擬機器"時,很少會讀到Python"虛擬機器"。
兩者都解釋位元組碼(一個是解釋Java 一個是解釋Python); 為什麼一個叫虛擬機器,另一個叫直譯器(Interpreter)?

注意 這裡的"虛擬機器"是指處理虛擬機器,而不是系統虛擬機器(例如Qemu或Virtualbox)。程式虛擬機器是隻是提供一般程式設計環境的程式-程式可以程式設計。

下面詳細解釋以下兩種叫法的起源:
Java具有直譯器和虛擬機器,而Python具有虛擬機器機器和口譯員。之所以"虛擬機器"更多Java中的通用術語,而"直譯器"是Python中更常見的術語與兩種語言之間的主要區別有關:靜態型別(Java)與動態型別(Python)。
在本文中,"型別"是指原始資料型別-表示以下項的記憶體儲存大小的型別資料。
我們來仔細想一想Java程式 Java要求程式設計師指定每個變數的原始資料型別。但是Python不這樣 它可以去猜,雖然這比較接近自然語言 但是這使得編譯Python程式的時候 編譯器的構造更加複雜(因為在執行每個操作之前確定暫停的附加任務涉及的每個變數或資料結構的原始資料型別操作)
所以 直譯器是Python的首選術語 因為他必須暫停並檢查資料型別。

但是我們要注意的是 雖然兩者都用了位元組碼一次 但是並非所有的位元組碼都是平等的。事實上 他只是中間語言的通用術語,介於我們寫的code的語言(高階語言:Python,Java)和計算機能看懂的語言(二進位制碼)之間,這種語言由編譯器/直譯器來使用。 Java位元組碼包含有關原始資料型別的資訊,而Python位元組碼則沒有。所以從某種意義上來說 Python虛擬機器比Java虛擬機器要慢。

總結一下 其實兩者本質相同 都是用來解釋對應的高階語言的。

相關文章