編譯器jvm
編譯器負責把Java程序轉成Class文件,方便Jvm來讀取它.Jvm是java虛擬機,其實它就是解釋器,把Class文件中的命令轉成某種平台的命令,比如把Java命令轉成Windows下的命令,然後Java程序就執行了.
❷ 如何實現一個能在jvm上運行的語言的編譯器
可以理解為用java語言寫一個編譯器(運行在jvm上),然後用
javaXXLanguage
運行吧(還是說你要用JRuby,Jython實現?都是運行在jvm上的),
你可以試試
❸ 寫個編譯器,把C++代碼編譯到JVM的位元組碼可不可行
Java是平台無關的語言是指用Java寫的應用程序不用修改就可在不同的軟硬體平台上運行。平台無關有兩種:源代碼級和目標代碼級。C和C++具有一定程度的源代碼級平台無關,表明用C或C++寫的應用程序不用修改只需重新編譯就可以在不同平台上運行。
Java主要靠Java虛擬機(JVM)在目標碼級實現平台無關性。JVM是一種抽象機器,它附著在具體操作系統之上,本身具有一套虛機器指令,並有自己的棧、寄存器組等。但JVM通常是在軟體上而不是在硬體上實現。(目前,SUN系統公司已經設計實現了Java晶元,主要使用在網路計算機NC上。另外,Java晶元的出現也會使Java更容易嵌入到家用電器中。)JVM是Java平台無關的基礎,在JVM上,有一個Java解釋器用來解釋Java編譯器編譯後的程序。Java編程人員在編寫完軟體後,通過Java編譯器將Java源程序編譯為JVM的位元組代碼。任何一台機器只要配備了Java解釋器,就可以運行這個程序,而不管這種位元組碼是在何種平台上生成的(過程如圖1所示)。另外,Java採用的是基於IEEE標準的數據類型。通過JVM保證數據類型的一致性,也確保了Java的平台無關性。
❹ java編譯器和JVM有什麼區別
java編譯器把java源碼編譯成位元組碼 (.class文件).
jvm是在運行期將class文件編譯成機器碼文件.供程序運行.
❺ 「java編譯器」和「JVM」有什麼區別
java編譯器把java源碼編譯成位元組碼
(.class文件).
jvm是在運行期將class文件編譯成機器碼文件.供程序運行.
❻ 關於JVM和編譯器
編譯為位元組碼的JAVA程序可以直接在JVM上運行,無需再次編譯.
C程序必須在不同的平台重新編譯,並且可能需要依據不同的系統修改程序中用到的數據類型.
❼ java編譯器和java虛擬機的關系
java編譯器是開發java程序用的
java虛擬機是java跨平台的解釋java程序和運行java程序用的
❽ java中eclipse,jdk,jvm,jre,編譯器的區別
JVM就是常說的java虛擬機,它是整個java實現跨平台的 最核心的部分,所有的java程序會首先被編譯為.class的類文件,這種類文件可 以在虛擬機上執行,也就是說class並不直接與機器的操作系統相對應,而是經過虛擬機間接與操作系統交互,由虛擬機將程序解 釋給本地系統執行。
JVM 是 Java 平台的基礎,和實際的機器一樣,它也有自己的指令集,並且在運行 時操作不同的內存區域。 JVM 通過抽象操作系統和 CPU 結構,提供了一種與平台無關的代碼執行方法,即與特殊的實現方 法、主機硬體、主機操作系統無關。但是在一些小的方面, JVM 的實現也是互不相同的,比如垃圾回收 演算法,線程調度演算法(可能不同 OS 有不同的實現)。JVM 的主要工作是解釋自己的指令集(即位元組碼)到 CPU 的指令集或 OS 的系統調用,保護用戶免被惡意程序騷擾。 JVM 對上層的 Java 源文件是不關心的,它關注的只是由源文件生成的類文件( class file )。類文件的 組成包括 JVM 指令集,符號表以及一些補助信息。
JRE是指java運行環境。光有JVM還不能成class的 執行,因為在解釋class的時候JVM需要調用解釋所需要的類庫lib。 在JDK的安裝目 錄里你可以找到jre目錄,裡面有兩個文件夾bin和lib,在 這里可以認為bin里的就是jvm,lib中則是jvm工 作所需要的類庫,而jvm和 lib和起來就稱為jre。所以,在你寫完java程序編譯成.class之後,你可以把這個.class文件 和jre一起打包發給朋友,這樣你的朋友就 可以運行你寫程序了。(jre里有運行.class的java.exe)
JRE 是 Sun 公司發布的一個更大的系統,它裡面就有一個 JVM 。 JRE 就與具體的 CPU 結構和操作系統有關,我們從 Sun 下載 JRE 的時候就看到了不同的各種版本。同 JVM 一起組成 JRE 的還有一些 API (如 awt , swing 等)。 JRE 是運行 Java 程序必不可少的。
JRE ( Java Runtime Environment ),是運行 Java 程序必不可少的(除非用其他一些編譯環境編譯成.exe可執行文件……),JRE的 地位就象一台PC機一樣,我們寫好的Win32應用程序需要操作系統幫 我們運行,同樣的,我們編寫的Java程序也必須要JRE才能運行。
JRE裡面有一個 JVM , JRE 與具體的 CPU 結構和操作系統有關,我們從 Sun 下載 JRE 的時候就看到了不同的各種版本,,同 JVM 一起組成 JRE 的還有 一些 API (如 awt , swing 等), JRE 是 運行 Java 程序必不可少的.
JDK是java開發工具包,基本上每個學java的人都會先在機器 上裝一個JDK,那他都包含哪幾部分呢?讓我們看一下JDK的安裝目錄。在目錄下面有 六個文件夾、一個src類庫源碼壓縮包、和其他幾個聲明文件。其中,真正在運行java時起作用的 是以下四個文件夾:bin、include、lib、 jre。現在可以看出這樣一個關系,JDK包含JRE,而JRE包 含JVM。
bin:最主要的是編譯器(javac.exe)
include:java和JVM交互用的頭文件
lib:類庫
jre:java運行環境
(注意:這里的bin、lib文件夾和jre里的bin、lib是 不同的)總的來說JDK是用於java程序的開發,而jre則 是只能運行class而沒有編譯的功能,eclipse、idea等 其他IDE有自己的編譯器而不是用JDK bin目錄中自帶的,所以在安裝時你會發現他們只要求選中jre路徑就ok了。
三者聯系:
Java 喊出的帶有標志性的口號「 Write Once , Run Anywhere (一次編寫,到處運行)」,正是建立在 JRE 的基礎之上。何以實現?就是在 Java 應用程序和操作系統之間增加了一虛擬層—— JRE 。
程序源代碼不是直 接編譯、鏈接成機器代碼,而是先轉化到位元組碼( bytecode ) 這種特殊的中間形式,位元組碼再轉換成機器碼或系統調用。前者是傳統的編譯方法,生成的機器代碼就不可避免地跟特殊的操作系統和特殊的機器結構相關。而 Java 程序的位元組碼文件可以放到任意裝有 JRE 的計算機運行,再由不同 JRE 的將它們轉化成相應的機器代碼,這就實現了 Java 程序的可移植性。這樣程序員也不用去 關心程序運行的具體環境,而可以專心編寫軟體。這種分層抽象、隱藏細節的思想在計算機科學中處處可見,比如機器組織結構的設計、網路協議的實現等。 Pascal 語言的發明者 Niklaus Wirth ,就富有預見性地指出應該有這樣一種可移植的語言,其生成的中間代碼可以在一台假想的機器( a hypothetical machine )上運行。
而 Java 虛擬機( Java virtual machine 或 JVM )就是這樣的一台機器,它模擬實際處理器的結構,解釋位元組碼。 怎麼一會說是 JRE ,一會兒又成了 JVM ,兩者是否同物不同名? 回答是否定的。
JRE的地位就象一台PC機一樣,我們寫好的Win32應用程序需要操作系統幫 我們運行,同樣的,我們編寫的Java程序也必須要JRE才能運行。
要運行Applet,在客戶端必須安裝有 JRE,即「運行時」,容易一點理解,就象所謂的「插件」,要開發JAVA應用程序Web應用,就必須在伺服器端安裝相應的 JVM+JDK 了(開發應用 Java web應用 時,客戶端不需要安裝任何的JVM)如果使用JAVA開發應用,就需要安裝 JRE+JDK,就是 J2SE. 。如果在客戶端運行Applet,客戶端瀏覽器必須嵌有JAVA JVM,如果沒有,就需要安裝,即: 在客戶端創建JRE(運行時,包含JVM),而客戶端是不需要做開發的,所以,JDK就沒有必要安裝 了。不同版本的Applet在不同的JVM下可能無法正常運行,而Microsoft JVM只是Sun JVM的「低版本」,微軟在windows xp/2003中乾脆將JVM去掉了.
❾ jdk中有編譯器,解釋器,jvm,那麼它們是如何配合工作的呢
Java源代碼---->編譯器---->Java位元組碼(即虛擬指令)---->jvm---->解釋器----->二進制機器碼
❿ 編譯器 JVM JDK JRE JSE是什麼 關系都有什麼用,都怎麼樣工作的
java是面向對象編程,一切皆對象。這個觀念要以後慢慢才能了解,無論怎麼樣講都是初學者理解不了的。所以還需要多多練習。
C語言是面向過程編程的。所以沒有「類」的概念,而java的類卻更符合人類的思維方式,C語言更符合機器的思維方式。
還有就是,千萬不要把C語言的一些概念和java混淆,這是兩種不同類型的語言,java是純的面向對像的編程語言,而C是面向過程的。以後的學習中你會發現java比C更有優勢。再重申一下,最好不要把C的概念和java做對比。你把java當作一門新的語言來學。 唯一可以借鑒C的就是語法和編程的一些基本概念如數據類型,設計模式之類的。
jvm 是java虛擬機,將java的class位元組碼文件翻譯成二進制可執行程序。
jdk 是java的開發包 java sdk, java的開發工具,包含SUN公司提供的java API,將java源碼編譯為class位元組碼文件,通常jdk中就包含了jre。
jre 是java運行時,用於執行java程序。
jse 是java標准開發,jse 就是java開發的一種,標准開發,例如開發桌面程序。
其餘的還有 javaEE, javaMe 前者是java的企業應用,後者是java的嵌入式開發,例如java手機程序。
如果netbeans能運行,說明你安裝的netbeans已經包含了JDK,而jdk里已經包含了jre和jvm,故以後就可以省心了,至於環境變數的事情,你可以去搜索一下,很簡單的配置,有個好消息告訴你,如果你是按照安裝向導操作的,向導會自動將環境變數寫進去。
java基礎類庫就是API,而你說的「庫」我不太明白是什麼意思。
jdk是開發工具包,裡麵包含 javaSE, JRE, JVM
jdk 把.java文件編譯成為.class位元組碼文件
然後JRE調用JVM將位元組碼文件翻譯成可供機器執行的程序。就這樣了啊。
最後說一句: 不推薦使用Netbeans, 現在公司里都用Eclipse,這才是趨勢。
************************************8
繼續補充
angelicdemon 所說的沒錯,IDE環境會在配置文件里自己寫上jdk和jre的路徑以便找到他們。
但是經過安裝向導安裝jdk後確實會自動將java所需要的環境變數寫進系統環境變數中。再有,如果使用IDE的話 環境變數沒啥用處,只有用命令行模式編譯java源碼才會有用處。
另外: Eclipse絕對是現在公司的首選,因為公司里的項目用ECLIPSE構建的,源碼上傳到版本控制系統後,同步後,你用Netbeans打不開,還得重新構建,麻煩嗎? 再說了NB和EC還是有相當大區別的。
還有就是,這句話最重要,如果你真的是java初學者,絕對不要用IDE,用記事本+命令行 這樣才能真正掌握java的機理。 哈哈 累死我了,就寫到這吧
angelicdemon 看來也和這貼幹上了。
一會兒這貼成論文貼了
***********************************
以上回答可能有錯誤,要參考其他人的答案。