1. 程式人生 > >java原始碼的執行過程概述

java原始碼的執行過程概述

我們編寫完成的java程式,即java原始碼檔案,首先需要經過編譯器(compiler)的編譯,生成被稱為java位元組碼的中間檔案,即class檔案,其必須在java虛擬機器(java virtual machine)上被解釋執行,最終被直譯器解釋成計算機能夠識別的機器碼。其執行如下圖所示:

關於java的一些說法:

1、一次編譯,到處執行。

java源程式經過編譯器的編譯後,會生成位元組碼檔案(這是二進位制檔案,它可以通過一些反編譯軟體在變成java檔案),位元組碼檔案可以在不同平臺的java虛擬機器上進行解釋執行,所以java語言有"一次編譯,到處執行"的說法。

2、跨平臺(平臺無關性)

因為java源程式編譯生成的位元組碼可以在不同平臺的java虛擬機器上執行,可以說位元組碼檔案是java語言實現跨平臺優勢的關鍵。

編譯方式與解釋方式:

1、編譯方式——當用戶將高階語言編寫的源程式執行前,編譯器便把所有源程式一次性"解釋"成與機器語言等價的目標程式,然後計算機執行該目標程式,以實現源程式的運算,處理,並獲取結果。這種方式執行速度快,但是不能實現跨平臺。

2、解釋方式——程式在執行的時候,直譯器邊掃描邊解釋,逐句輸入,逐句解釋,逐句執行,並不產生目標程式。這種方式執行速度相對較慢,但是這種程式執行時往往不依賴於特定的平臺,通過在不同平臺上提供不同的直譯器就可以跨平臺執行。

相關推薦

java原始碼執行過程概述

我們編寫完成的java程式,即java原始碼檔案,首先需要經過編譯器(compiler)的編譯,生成被稱為java位元組碼的中間檔案,即class檔案,其必須在java虛擬機器(java virtual machine)上被解釋執行,最終被直譯器解釋成計算機能夠識別的機器碼。

JAVA方法執行過程(最詳細的解釋)

弄清楚方法的呼叫過程,對於我們學習java極為重要,下面是呼叫過程的詳細描述: 1、編譯器檢視物件的宣告型別和方法名。 編譯器去尋找所有名字為f但引數型別不同的方法。例如可能存在方法f(int)和方法f(String),編譯器會一 一列出所有當前類中所有名為f的方法,和其超類中訪問屬性為pu

java程式執行過程

  Java User java是JVM,執行java後就準備好了程式碼區,靜態區,棧區,堆區。 執行User時現在程式碼區找看有沒有User.class,如果沒有就在環境裡找classpath環境變數,classpath裡面有很多路徑,逐一在每個路徑下找該User.cl

koa2第二篇: 圖解中介軟體原始碼執行過程

中介軟體 首先寫一個簡單的中介軟體demo: const Koa = require('koa') const app = new Koa() const port = 3000 const ctx1 = async (ctx, next) => { console.lo

java程式執行過程中動態載入jar包

最近做一個遠端介面測試系統,遇到了動態載入jar包的問題,如將使用者上傳的jar包動態載入後呼叫遠端介面的方法,特將例子記錄下來以便查詢。package cn.baokx.test_addjar; import java.io.File; import java.lang

Java原始碼】樹-概述

樹的基本術語 結點(node)由資料元素以及指向子樹的地址構成。 若 X 結點有子樹,則子樹的根結點稱為 X 的孩子(child)結點,相應地, X 稱為其孩子的雙親(parents)結點,又稱父母結點。 同一雙親的孩子結點之間互稱兄弟(sibling)結點。 葉子(leaf)結點是指度為 0 的結點,又稱

Java程式執行過程及記憶體機制

本講將介紹Java程式碼是如何一步步執行起來的,其中涉及的編譯器,類載入器,位元組碼校驗器,直譯器和JIT編譯器在整個過程中是發揮著怎樣的作用。此外還會介紹Java程式所佔用的記憶體是被如何管理的:堆、棧和方法區都各自負責儲存哪些內容。最後用一小塊程式碼示例來幫助理解Java程式執行時記憶體的變化。 ##

自己動手實現springboot執行執行java原始碼(執行時編譯、載入、註冊bean、呼叫)

  看來斷點、單步除錯還不夠硬核,根本沒多少人看,這次再來個硬核的。依然是由於apaas平臺越來越流行了,如果apaas平臺選擇了java語言作為平臺內的業務程式碼,那麼不僅僅面臨著IDE外的斷點、單步除錯,還面臨著為了實現預覽效果,需要將寫好的java原始碼動態的裝載到spring容器中然後呼叫原始碼內的某

C#、JAVA操作Hadoop(HDFS、Map/Reduce)真實過程概述。元件、原始碼下載。無法解決:Response status code does not indicate success: 500。

一、Hadoop環境配置概述       三臺虛擬機器,作業系統為:Ubuntu 16.04。       Hadoop版本:2.7.2       NameNode:192.168.72.132       DataNode:192.168.72.135,192.168.72.136   

最新淺析java原始碼轉換為機器碼的編譯執行過程

我們先來看一下編譯型語言和解釋型語言的之間的區別聯絡 編譯型語言:C/C++       編譯過程是將原始碼(高階語言,人類容易讀,容易理解),轉換為機器碼(cpu能理解,能高效的執行)的過程. 解釋型語言:JavaScript  python 等      直

動圖+原始碼,演示Java中常用資料結構執行過程及原理

最近在整理資料結構方面的知識, 系統化看了下Java中常用資料結構, 突發奇想用動畫來繪製資料流轉過程. 主要基於jdk8, 可能會有些特性與jdk7之前不相同, 例如LinkedList LinkedHashMap中的雙向列表不再是迴環的. HashMap中的單鏈表是尾插, 而不是頭插入等等, 後文不再贅敘

Hive執行過程中出現Caused by : java.lang.ClassNotFoundException: org.cloudera.htrace.Trace的錯誤解決辦法(圖文詳解)

pre wid logs In 實用 過程 ase edit 微信     不多說,直接上幹貨! 問題詳情     如下   這個錯誤的意思是缺少 htrace-core-2.04.jar。  解決辦法:   

jdk環境配置以及java執行過程

內存 tool 備份 jdk 1.8 防止 style 屬性 spa 下載好jdk,並按照提示一步步安裝,最後記下jdk所在的安裝位置,這裏假設在C:\Program Files (x86)\Java\jdk1.8.0_20 現在開始配置環境變量。鼠標右鍵點擊“

Java執行緒池原始碼深入理解

在前面的文章中,我們使用執行緒的時候就去建立一個執行緒,這樣實現起來非常簡便,但是就會有一個問題: 如果併發的執行緒數量很多,並且每個執行緒都是執行一個時間很短的任務就結束了,這樣頻繁建立執行緒就會大大降低系統的效率,因為頻繁建立執行緒和銷燬執行

"java檔案-class檔案-JVM顯示" 編碼執行過程

以GBK 方式編寫下面java檔案 import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; public class EscapeTest { public static void

Java編譯(二) Java前端編譯:Java原始碼編譯成Class檔案的過程

Java編譯(二)Java前端編譯: Java原始碼編譯成Class檔案的過程               在上篇文章《Java三種編譯方式:前端編

Java原始碼--LinkedList原始碼概述

與ArrayList同為List,LinkedList卻展現出不同的特性。作為java.util下的另一重要容器,我們下面來探究一下LinkedList的原始碼實現及特性分析。 上篇文章講述到,ArrayList用陣列來儲存資料,伴隨資料量的變大,ArrayList動態擴充陣列容量。與之不同,LinkedL

Java編譯程式和執行過程詳解

java整個編譯以及執行的過程相當繁瑣,我就舉一個簡單的例子說明: 編譯原理簡單過程:詞法分析 --> 語法分析 --> 語義分析和中間程式碼生成 --> 優化 --> 目的碼生成 Java程式從原始檔建立到程式執行要經過兩大步驟: 1、Java檔案會由

圖解系列之JAVA執行過程

分享圖片 ava RoCE shadow ces 51cto mark mar oss 圖解系列之JAVA執行過程

弄清Java虛擬機器GC的執行過程

前言:要弄清Java虛擬機器GC的整個過程,就得弄明白Java虛擬機器用什麼來進行GC?Java虛擬機器在哪裡GC?什麼時候GC?GC什麼? 開門見山 GC(Garbage Collection)垃圾收集,JVM一個非常重要的功能。本文將圍繞著JVM的GC這個動作展開,來過一遍GC的整個運作過程。 JV