java編譯型解釋
Java,Python誰是編譯型語言,誰是解釋型語
編譯型語言要先編譯再運行,而解釋性語言直接「運行」源代碼。
回到最開始的問題,如果以是「否保存機器碼為exe文件」為區分,那麼Java和Python都屬於解釋型語言。
但具體來講,Java和Python是有很大不同的。Java代碼從源程序到執行,要經過的過程是:編譯器(javac)把源代碼轉化為位元組碼,然後解釋器(Java.exe)把位元組碼轉換為計算機理解的機器碼來執行,其過程中沒有把「機器碼保存為exe」的行為(這樣講也不完全准確,下面會講到)。其中編譯器和解釋器都是Java虛擬機(JVM)的一部分,由於針對不同的硬體與OS,Java解釋器有所不同,因此可以實現「一次編譯、到處執行」。所以JVM是Java跨平台特性的關鍵所在。
Java虛擬機(JVM)一種用於計算機設備的規范,可用不同的方式(軟體或硬體)加以實現。編譯虛擬機的指令集與編譯微處理器的指令集非常類似。Java虛擬機包括一套位元組碼指令集、一組寄存器、一個棧、一個垃圾回收堆和一個存儲方法域
對於Python,其源代碼到執行也要經過如下過程:源代碼--->位元組碼--->機器碼。跟Java相同的是,其過程中也沒有把「機器碼保存為exe」的行為。與Java不同的是,Python使用的虛擬機是基於其他語言實現的,比如我們一般使用的Python實際為Cpython,也就是其虛擬機由C實現,這個虛擬機負責把Python源碼編譯為位元組碼,再解釋執行。另外,還有Jypython、Ironpython等。
⑵ 編譯型和解釋型的區別&Java從編譯到執行的過
1、區別:
編譯型語言在程序執行之前,有一個單獨的編譯過程,將程序翻譯成機器語言,以後執行這個程序的時候,就不用再進行翻譯了。
解釋型語言,是在運行的時候將程序翻譯成機器語言,所以運行速度相對於編譯型語言要慢。
2、Java從編譯到執行的過程:
⑶ Java 是編譯型語言還是解釋型語言
高級計算機語言主要有兩種類型:編譯和解釋。
這是一個跨平台的java,並可在任何地方運行:跨平台的java是基於JVM。Java虛擬機是由軟體或硬體模擬的計算機程序,java,計算機所有的.class文件是運行在JVM,即JVM *。只有Java類文件,以適應不同的操作系統,讓操作系統的安裝按照不同只要JVM的類型,然後程序無論哪個操作系統的JVM可以糾正窗口/其他...... JVM的Unix / JVM的實現因此,如果沒有JVM,就不能跨平台。
⑷ java是編譯型語言還是解釋型語言
概念:
編譯型語言:把做好的源程序全部編譯成二進制代碼的可運行程序。然後,可直接運行這個程序。
解釋型語言:把做好的源程序翻譯一句,然後執行一句,直至結束!
區別:
編譯型語言,執行速度快、效率高;依賴編譯器、跨平台性差些。如C、C++、Delphi、 Pascal,Fortran。
解釋型語言,執行速度慢、效率低;依賴解釋器、跨平台性好。如Java、Basic.
通俗的講,編譯語言是在編譯後可以直接運行,而解釋語言的執行需要一個解釋環境。
java很特殊,java程序也需要編譯,但是沒有直接編譯稱為機器語言,而是編譯稱為位元組碼,然後用解釋方式執行位元組碼。
JIT:
首先採用編譯形式生成某種中介代碼(Java bytecode/MSIL),然後在運行時將其(通常以函數或Block為單位)最終轉換成機器碼,然後執行,轉化的機器碼可以被cache,以提高重復執行的效率
JAVA的第一道工序是javac編譯,當然目標文件是BYTECODE。後續可能有三種處理方式:
1. 運行時,BYTECODE由JVM逐條解釋執行,
2. 運行時,部分代碼可能由JIT翻譯為目標機器指令(以method為翻譯單位,還會保存起來,第二次執行就不用翻譯了)直接執行;
3. RTSJ。繼JAVAC之後執行AOT二次編譯,生成靜態的目標平台代碼(典型的就是IBM WEBSHPERE REAL TIME)。
⑸ 編譯型和解釋型的區別&Java從編譯到執行的過程
編譯執行:
編譯執行是一種計算機語言的執行方式。由編譯程序將目標代碼一次性編譯成目標程序,再由機器運行目標程序(效率高於解釋執行)
解釋執行:
使用解釋執行的程序我們一般稱為解釋程序。它將源語言直接作為源程序輸入,解釋執行解釋一句後就提交計算機執行一句,並不形成目標程序。解釋執行不依賴於平台。
Java從編譯到執行的過程:
⑹ Java是解釋型語言還是編譯型語言
Java是編譯型語言,代碼編程之後,需要編譯成機器可以運行得文件,才能運行。
解釋型語言是代碼寫好之後不用編譯,直接可以運行得。例如html,這種。所見即所運行得。
⑺ 編譯型和解釋型的區別&Java從編譯到執行的過程
Java這個語言很非凡。
二、你可以說它是解釋型的。因為java代碼編譯後不能直接運行,它是解釋運行在JVM上的,所以它是解釋運行的,那也就算是解釋的了。
三、但是,現在的JVM為了效率,都有一些JIT優化。它又會把.class的二進制代碼編譯為本地的代碼直接運行,所以,又是編譯的。
像C、C++ 他們經過一次編譯之後直接可以編譯成操作系統了解的類型,可以直接執行的 所以他們是編譯型的語言。沒有經過第二次的處理 而Java不一樣他首先由編譯器編譯成.class類型的文件,這個是java自己類型的文件 然後在通過虛擬機(JVM)從.class文件中讀一行解釋執行一行,所以他是解釋型的語言,而由於java對於多種不同的操作系統有不同的JVM所以
Java實現了真正意義上的跨平台!
請觀看下面兩張圖 了解一下Java的虛擬機機制:
(1)java語言的編譯--解釋---執行過程
(2)java的虛擬機
定義:編譯型語言:把做好的源程序全部編譯成二進制代碼的可運行程序。然後,可直接運行這個程序。
解釋型語言:把做好的源程序翻譯一句,然後執行一句,直至結束!區別:編譯型語言,執行速度快、效率高;依靠編譯器、跨平台性差些。
解釋型語言,執行速度慢、效率低;依靠解釋器、跨平台性好。
個人認為,java是解釋型的語言,因為雖然java也需要編譯,編譯成.class文件,但是並不是機器可以識別的語言,而是位元組碼,最終還是需要 jvm的解釋,才能在各個平台執行,這同時也是java跨平台的原因。所以可是說java即是編譯型的,也是解釋型,但是假如非要歸類的話,從概念上的定義,恐怕java應該歸到解釋型的語言中。