JVM是JavaVirtualMachine(Java虛擬機)的縮寫,JVM是一種用於計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平台上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機後,Java語言在不同平台上運行時不需要重新編譯。Java語言使用Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行字節碼時,把字節碼解釋成具體平台上的機器指令執行。這就是Java的能夠“一次編譯,到處運行”的原因。
通過之前對各個語言的了解,我們再來看到這種圖的時候會更加清楚層級問題,讓我給這個層級排序的話,我會這樣排序(不服來辯):程序性能排名:匯編>系統級語言>應用級語言>腳本級語言程序可讀性:腳本級語言>應用級語言>系統級語言>匯編最後最後了,我再為大家介紹一下各個層級的意思就結束硬件層級:就是CPU、內存、顯卡等,不屬於軟件范疇匯編層級:可讀性差,但是現在有編譯器哈,所以市場匯編語言的工程師需求變量是很少的。高級語言需求量增大了。因為高級語言很好讀;系統層級:Windows、Linux、Mac、OS、Andriod、IOS等等。就是電腦軟件都是跑在操作系統上的。應用層級:是更加偏重軟件的程序的執行流程和功能的。開發起來體量非常大。腳本層級:這裡面不涉及樓主上面說的四種語言,我就是略說一下。腳本級語言的代碼很直給的,代碼速度快。但是雖然可讀性強,但是編譯器把腳本語言翻譯成匯編語言的成本很大。
語言作為經典的面向過程的靜態語言,可以說老一代程序猿幾乎都接觸過C語言,一般來說,C語言編寫的代碼需要經過編譯、鏈接最後形成可執行文件,這些行為有編譯器完成,開發者只需要寫代碼即可。而C++作為一種面向對象語言,全面兼容了C語言,但引入了類、多態、RTTI、RAII等機制,相對於來說,從源碼到可執行文件的過程和C語言幾乎一樣。學習掌握要比C語言難度大,精通的話,更是有難度,如果想了解如何學習C++及提高的話題,可以參考我的另一篇文章:
而Java語言作為面向對象高級語言,也有類、多態等概念,生態非常強大,一般來說,Java代碼需要經過javac編譯成字節碼文件,也就是.class文件,這個文件可以在不同的平台上直接運行,需要安裝對應平台的jvm。Python作為一種解釋性的膠水語言,沒有針對機器代碼的編譯,每一條語句的執行都是直接對源代碼或者中間代碼進行解釋運行。而少了這個編譯的過程,使得解釋型語言運行相對較慢。如果想了解更多python學習方面的信息,可以參考我的另一篇文章:
從用途看c 主要用來做嵌入式應用 、算法實現、 服務開發等。c++主要做圖形圖像處理、服務開發等。java主要用在服務接口開發,大多數mis系統的後台接口都有java開發。python用途相對還是廣泛的,像網絡爬蟲、數據分析、自動化運維、人工智能等。從跨平台看c,c++屬於代碼級別的跨平台,必須針對不同的平台進行編譯。而java, python直接所謂的編譯得到字節碼文件(.class, .pyc), 然後可以在任意平台上運行,當然這個平台上必須安裝對於的jvm, 或pvm。
python: 快速開發應用程序
java: 健壯的大型軟件
C++: 需求效率的軟件
C: 操作系統及驅動
C、Python、C++、Java的對比 詳細介紹:
https://blog.csdn.net/qq_35705269/article/details/74085121
https://blog.csdn.net/weixin_50930712/article/details/122726234
python解釋器安裝:https://blog.csdn.net/qianshuiliyu/article/details/122490937https://blog.csdn.net/qianshuiliyu/article/details/122490937
python為什麼不用編譯
和傳統的編譯型語言不同的是,python是一種解釋型的腳本語言。python的代碼在運行時,由解釋器當做文本文件讀取後一行一行解釋翻譯並運行,所以python不需要進行編譯,當然這也導致了python運行效率沒有傳統的C/C++等編譯型語言高。
1、編譯型編程語言編譯語言(英語:Compiled language)是一種編程語言類型,通過編譯器來實現。它不像解釋型語言一樣,由解釋器將代碼一句一句執行,而是以編譯器,先將代碼編譯為機器代碼,再加以執行。理論上,任何編程語言都可以是編譯式,或直譯式的。它們之間的區別,僅與程序的應用有關。以C/C++ Go 等
2、解釋型編程語言解釋型語言(英語:Interpreted language)是一種編程語言類型。這種類型的編程語言,會將代碼一句一句直接執行,不需要像編譯語言(Compiled language)一樣,經過編譯器先行編譯為機器代碼,之後再執行。這種編程語言需要利用解釋器,在執行期,動態將代碼逐句解釋(interpret)為機器代碼,或是已經預先編譯為機器代碼的子程序,之後再執行。理論上,任何編程語言都可以是編譯式,或解釋型的。它們之間的區別,僅與程序的應用有關。許多編程語言同時采用編譯器與解釋器來實現,其中包括Lisp,Pascal,BASIC 與 Python。JAVA及C#采用混合方式,先將代碼編譯為字節碼,在執行時再進行解釋。
由Java的代碼執行過程可知 ,一個Java 代碼的執行過程是由 . Java–>. class–>對應平台機器碼 ; . Java–>. class是由 Javac 編譯,這個過程符合編譯型語言的特點(一次性編譯,注意 並未編譯為實際平台的機器碼,)而. class–>對應平台機器碼 的這一過程 是由Java解釋執行 (逐行解釋為特定平台機器碼)這一過程符合解釋語言的特點 ;所以說 Java既是編程語言 ,又是解釋語言。
(1)java語言的編譯–>解釋—>執行過程
(2)java的虛擬機
定義:
編譯型語言:把做好的源程序全部編譯成二進制代碼的可運行程序。然後,可直接運行這個程序。
解釋型語言:把做好的源程序翻譯一句,然後執行一句,直至結束!
區別:
編譯型語言,執行速度快、效率高;依靠編譯器、跨平台性差些。
解釋型語言,執行速度慢、效率低;依靠解釋器、跨平台性好。
個人認為,java是解釋型的語言,因為雖然java也需要編譯,編譯成.class文件,但是並不是機器可以識別的語言,而是字節碼,最終還是需要 jvm的解釋,才能在各個平台執行,這同時也是java跨平台的原因。所以可是說java即是編譯型的,也是解釋型,但是假如非要歸類的話,從概念上的定義,恐怕java應該歸到解釋型的語言中。