詳解 Java“一次編譯,到處執行”的跨平臺功能
Java的跨平臺功能和它的Java虛擬機器(簡稱 JVM)的中介作用是分不開的。所謂跨平臺的“平臺”指:作業系統。沒錯,就是我們接觸的Linux和Windows等作業系統。Java跨平臺,通俗的解釋是:用Java編寫的程式,既可以在Linux下執行,也可以在Windows下執行。
圖解:
以QQ為例,我們平時在Windows上使用的QQ不是直接使用的它的原始碼,而是經過編譯後的.exe檔案(可執行檔案),但.exe檔案只能在Windows上執行,不能在Linux上執行。
Java編寫的QQ,在編譯時不編譯成.exe而是編譯為.class檔案,也稱為位元組碼檔案。Java虛擬機器負責將位元組碼檔案翻譯成特定平臺下的機器碼然後執行。也就是說,只要在不同平臺上安裝對應的JVM,就可以執行位元組碼檔案,執行我們編寫的Java程式。而這個過程中,我們編寫的Java程式沒有做任何改變,僅僅是通過JVM這一“中間層”,就能在不同平臺上執行,真正實現了”一次編譯,到處執行“的目的。
JVM是一個“橋樑”,是一個“中介軟體”,是實現跨平臺的關鍵。Java程式碼首先被編譯成位元組碼檔案,再由JVM將位元組碼檔案翻譯成機器語言,從而達到執行Java程式的目的。
注意:
編譯的結果不是生成機器碼,而是生成位元組碼,位元組碼不能直接執行,必須通過JVM翻譯成機器碼才能執行。不同平臺下編譯生成的位元組碼是一樣的,但是由JVM翻譯成的機器碼卻不一樣。
所以,執行Java程式必須有JVM的支援,因為編譯的結果不是機器碼,必須要經過JVM的再次翻譯才能執行。即使你將Java程式打包成可執行檔案(例如.exe),仍然需要JVM的支援。
有人問到:Java可以跨平臺,那麼,JVM可以跨平臺嗎?
的確,跨平臺的是Java程式,但不是JVM。JVM是用C/C++開發的軟體,是編譯後的機器碼,所以,不能跨平臺,不同平臺下仍需要安裝不同版本的JVM。
相關推薦
詳解 Java“一次編譯,到處執行”的跨平臺功能
Java的跨平臺功能和它的Java虛擬機器(簡稱 JVM)的中介作用是分不開的。所謂跨平臺的“平臺”指:作業系統。沒錯,就是我們接觸的Linux和Windows等作業系統。Java跨平臺,通俗的
圖文詳解Java中的servlet,以及servlet中使用到的關鍵技術
Servlet是Java中實現動態網頁的技術: 如果有想學習java的程式設計師,可來我們的java學習扣qun:79979,2590免費送java的視訊教程噢!小編是一名5年java開發經驗的全棧工程師,整理了一份適合18年學習的java乾貨,送給每一位想學的小夥伴,歡迎大家一起學習哦。
hdu5316區間最值問題(附帶題目意思詳解) 一次ac
T組資料 N個數字,M次操作 op=0:找出L-R區間內的最大‘值’ op=1:把a位置的數字換成b 對最大‘值’的定義:取區間內的最大子序列,需要保證子序列的下標為奇偶交替的 用線段樹分別記錄每個區間的 .........s1.......奇數位開始,奇數
java-一次編譯到處執行
知識用自己的話表述出來才會印象深刻。 java為何是一次編譯到處執行?因為java進過編譯後成為位元組碼檔案(class檔案),然後通過jvm(java虛擬機器)將位元組碼檔案翻譯成機器碼。所以不同作業系統linux、windows分別安裝各自版本的jvm就可以執行java
面試必備:詳解Java I/O流,掌握這些就可以說精通了?
@TOC Java IO概述 IO就是輸入/輸出。Java IO類庫基於抽象基礎類InputStream和OutputStream構建了一套I/O體系,主要解決從資料來源讀入資料和將資料寫入到目的地問題。我們把資料來源和目的地可以理解為IO流的兩端。當然,通常情況下,這兩端可能是檔案或者網路連線。 我們用下面
頁面提交一次請求,action執行兩次
問題描述:struts2框架,ajax請求下頁面提交一次請求,action中的方法會執行兩次原因:action中的方法以get開頭,所以執行兩次,原理不清楚,猜測與struts2的屬性驅動有關係(以set、get方式設定和取值)解決方法:把方法名改為以其他字串開頭就好了
如何實現一次編碼,到處執行?新一代雲端一體化探索
阿里妹導讀:當前移動網際網路業務研發運維模式,雲與多端互相割裂,有些全棧的探索缺乏成功案例,行業對雲端一體化研發這塊仍是空白,
實現每隔一段時間,自動執行某個功能,比如自動提交資料到伺服器等
效果: 程式碼如下一個activity package com.mytest; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; im
maven自己主動編譯,解決你每次代碼改動須要又一次編譯的繁瑣
mvn clean span ng- ips 每次 servlet trac 問題 文件夾 maven結構的項目,我們在每次改動代碼後都會須要手動編譯,以下命令能夠解決此問題。僅僅要代碼改動。會自己主動幫你編譯。 進入項目文件夾運行:mvn -U eclipse:
如果上天再給我一次機會,我會這樣學Java
單例 離職 演示 唐詩 代理模式 大學 讓我 win 指導 回頭看看, 我進入Java 領域已經快15個年頭了, 雖然學的也一般, 但是分享下我的心得,估計也能幫大家少走點彎路。 [入門] 我在2001年之前是C/C++陣營, 有C和面向對象的基礎, 後來轉到Java ,發
Java的反射機制詳解(一)
pbc spa 詳解 uno face target lan tor cin 8n72q傅釁8戰sig叢http://www.docin.com/app/user/userinfo?userid=179185461 8u炊3F7LB椒1http://huiyi.docin.
windows命令行中java和javac、javap使用詳解(java編譯命令)
路徑 point 目錄 pan static article 字節碼 區別 string 如題,首先我們在桌面,開始->運行->鍵入cmd 回車,進入windows命令行。進入如圖所示的畫面: 可知,當前默認目錄為C盤Users文件夾下的Administr
PHP與Java集成開發詳解(一)
new 編程語言 到你 其中 web-inf request 測試 add 輸入 很久以前,有人從www上看到看到天空上一個很亮的亮點,它就是Java語言,與此同時,在另一個地方一位夢想家也看到了一個亮點,它就是PHP。 時間一天天過去,這兩個亮點也變得越來越亮,很快,它
一文詳解python的類方法,普通方法和靜態方法
http 接下來 方法調用 pytho 類和實例 訪問類 靜態 都是 com 首先形式上的區別,實例方法隱含的參數為類實例self,而類方法隱含的參數為類本身cls。 靜態方法無隱含參數,主要為了類實例也可以直接調用靜態方法。 所以邏輯上,類方法被類調用,實例方法
Java程式設計師從笨鳥到菜鳥之(一百)sql注入攻擊詳解(一)sql注入原理詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
ThreadLocal詳解(不看後悔,一看必懂)
ThreadLocal概要 我們可以使用synchorinized 關鍵字來為變數加鎖以解決執行緒安全問題,從而限制只能有一個執行緒來使用此變數,但是加鎖會大大影響程式執行效率 ThreadLocal是執行緒區域性變數(從執行緒的角度看,目標變數就像是執行緒的本地變數), 通常
ThreadPoolExecutor詳解(不看後悔,一看必懂)
構造器引數分析 第四個構造器原始碼 corePoolSize:核心池的大小 預設情況下,在建立了執行緒池後,執行緒池中的執行緒數為0,當有任務來之後,就會建立一個執行緒去執行任務,當執行緒池中的執行緒數數目少於corePoolSize時,有新任務進來就新建一個執行緒,即使
安卓專案實戰之強大的網路請求框架okGo使用詳解(一):實現get,post基本網路請求,下載上傳進度監聽以及對Callback自定義的深入理解
1.新增依賴 //必須使用 compile 'com.lzy.net:okgo:3.0.4' //以下三個選擇新增,okrx和okrx2不能同時使用,一般選擇新增最新的rx2支援即可 compile 'com.lzy.net:okrx:1.0.2' compile 'com.lzy
舉例詳解java例項變數,靜態變數,區域性變數
public class Variable { public int m,n;//對子類可見的例項變數 private double k;//只對本類可見的例項變數,一般情況下,設為私有,通過使用訪問修飾符來被子類使用。 public static String P;//靜態變數(
Java一組資料,滿足數量和求和的最優解
記錄一下,方便以後使用: 有一件物品是240元,需要所有人一起湊錢購買,求最優解:1、第一優先的是人數,湊夠錢買物品的人的組合裡,人數最少的2、第二優先的是價格,要求超過240,但是離240最接近的一組,因為從大到小排列一定能得到人數最少的,但是可能會比目標數額大很多,導致找零太多 最後要求