1. 程式人生 > >Java程式執行機制和JVM的理解

Java程式執行機制和JVM的理解

Java語言編寫的程式需要經過編譯,但是這個編譯步驟不會生成特定的平臺的機器碼,而是生成一種與平臺無關的位元組碼(也就是*.class檔案)。當然,這種位元組碼不是可執行的,所以必須要使用java直譯器來執行。所以,Java程式必須先通過編譯,再通過解釋,才可執行。

因此,可以認為:java既是編譯型語言,又是解釋型語言。或者說,java不是純粹的編譯型語言,又不是純粹的解釋型語言。

而Java中負責編譯的是Java虛擬機器,即JVM(Java Virtual Machine)。

JVM是可執行Java位元組碼檔案的虛擬計算機。所有平臺上的JVM向編譯器提供相同的程式設計介面,而編譯器只需要面向虛擬機器,生成虛擬機器能理解的程式碼,即生成的是與平臺無關的位元組碼,這些位元組碼不會面向任何具體平臺,然後由面向的虛擬機器來解釋執行(在一些虛擬機器的實現中,還會將虛擬機器程式碼轉換成特定系統的機器碼執行,從而提高執行效率)。

所以不同平臺上的JVM都是不同的,即適應不同平臺的介面是互不相同的,但是它們都為相同的Java位元組碼程式提供了相同的介面,使得相同的位元組碼程式可以在不同的平臺上執行。

實際上,JVM是一個抽象的計算機,和實際的計算機一樣,它具有指令集,並使用不同的儲存區域。它負責執行指令,還要管理資料、記憶體和暫存器。

相關推薦

Java程式執行機制JVM理解

Java語言編寫的程式需要經過編譯,但是這個編譯步驟不會生成特定的平臺的機器碼,而是生成一種與平臺無關的位元組碼(也就是*.class檔案)。當然,這種位元組碼不是可執行的,所以必須要使用java直譯器來執行。所以,Java程式必須先通過編譯,再通過解釋,才可執行。因此,可以

java程式執行機制jvm

歷史: sun在1996年釋出了JDK1.0.這個版本包括了兩部分:執行環境(JRE)和開發環境(JDK)。JRE中包含了了核心API,整合API,使用者介面API,釋出技術,java虛擬機器(jvm)五部分;JDK包括了編譯java程式的編譯器(即javac命令)。 jr

Java程式執行機制JVM、JDK及JRE的關聯

和其他編譯型以及解釋性語言相比,Java語言比較特殊,它的編譯過程比較特殊,並不會生成特定平臺的機器碼,而是生成一種與平臺無關的位元組碼(也就是*.class檔案)。     當然,這種位元組碼不是

大白話講解 Java程式執行機制JVM

據我們所知,Java程式是跨平臺的。那麼Java是如何實現跨平臺的呢?看完下面幾句話就會恍然大悟! 1.為什麼Java語言既是編譯型語言又是解釋型語言呢? 答:執行Java程式,首先需要經過編譯,編譯後會生成一種與平臺無關的位元組碼(也就是*.java檔案),而這種位元組

4.Java語言執行機制基礎——JVM

Java引進Java虛擬機器技術,針對不同的平臺,完全由軟體模擬或由軟體和硬體共同模擬,實現一臺虛擬的計算機。在Java中引入了虛擬機器的概念,即在機器和編譯器之間加入了一層抽象的虛擬的機器。 這臺虛擬的機器在任何平臺上都提供給編譯器一個共同的介面。編譯器只需要面向虛擬機器,生成虛擬機器能夠理解的程式碼,

Java程式執行機制簡介

Java程式執行機制 Java語言是一種特殊的高階語言,它既具有解釋型語言的特徵,也具有編譯型語言的特徵,因為Java程式要經過先編譯,後解釋兩個步驟。 高階語言的執行機制 計算機高階語言按程式的執行方式可以分為編譯型和解釋型兩種。編譯型語言

一位10年Java程式設計師總結進階中的你懂多執行jvm優化嗎?

感謝朋友們的認可和指正。本文是有感而發,因為看過了太多坑人的部落格和書籍,感慨自己走過的彎路,不希望其他初學者被網上互相抄襲的部落格和東拼西湊的書籍浪費時間,想以一個相對巨集觀的視野來描述一個概念,力求通俗易懂,所以沒有深入太多細節,簡化了很多模型,給部分朋友造成了疑惑,說聲抱歉。也沒有配圖,都是抽

Java執行緒小結 深入理解JVMJVM記憶體模型 Java Integer(-128~127)值的==equals比較產生的思考

  相關資料 -------------------------------------------------------------------------------------  Java多執行緒demo https://github.com/Beerkay/JavaMul

[深入理解JVM 一]---Java程式執行流程

本篇是《深入理解JVM》系列部落格的第一篇,旨在全域性把控,先對整體流程有個認識,然後再分階段詳解.本篇部落格大部分內容來自http://www.cnblogs.com/dqrcsc/p/4671879.htmljava一些地方重新進行了整理,根據自己的理解重新

Java程式執行機制Java虛擬機器

1、java程式的執行Java中原始檔字尾為*.java,編譯(也就是javac命令)使*.java檔案轉換為*.class檔案,然後在計算機上執行(java命令)*.class檔案。這就是java程式的執行過程,那麼JVM(java虛擬機器)是做什麼用的哪?首先我們來看一下

深入理解Java程式執行順序

下面將從一道阿里巴巴試題詳細分析Java程式執行順序。 阿里巴巴試題 public class Test { public static int k = 0; public static Test t1 = new Test("t1"); public static Test t

java程式執行順序理解

  public class StaticTest { public static int k = 0; public static StaticTest t1 = new StaticTest("t1"); public static StaticTest t2 =

Java程式執行物件建立過程簡述

Java中一個物件建立分為兩個步驟: 載入類,建立物件。 載入類是將所寫的程式.java檔案編譯生成的.class檔案載入到記憶體中,保證了物件建立的預置環境。類載入完畢後才可以建立該類的物件。 第一步:載入類 1. 當開始執行一個類,虛擬機器首先試圖訪問指定啟

jvmjava類載入機制類載入器(ClassLoader)的詳解

     當程式主動使用某個類時,如果該類還未被載入到記憶體中,則JVM會通過載入、連線、初始化3個步驟來對該類進行初始化。如果沒有意外,JVM將會連續完成3個步驟,所以有時也把這個3個步驟統稱為類載入或類初始化。                             

十、JAVA執行緒:JVM類載入器(自動類載入器、雙親委託機制、類載入器名稱空間、執行時包、類的解除安裝等)

  Jvm提供了三大內建的類載入器,不同的類載入器負責將不同的類載入到記憶體之中 根載入器(Bootstrap ClassLoader) 是最頂層的載入器,是由C++編寫的,主要負責虛擬機器核心類庫的載入,如整個java.lang包,根載入器是獲取不到引用的,因此

Linux下執行JAVA程式——JRE安裝配置

JAVA程式的執行必須要安裝JAVA RUNTIME ,也就是執行所需要的環境;我們可以通過安裝JRE 或者JDK 所獲得;如果我們只是應用不是開發,只下載JRE 的包就足夠; JDK包裡面也包含JRE;本文以JRE的安裝為例;JRE中還包括瀏覽器所需要的JAVA外掛;一、下載JRE;http://f

cmd命令列執行java程式的編譯執行的方法及可能出現找不到或無法載入主類的錯誤的解決

首先我們經常在用cmd命令列編譯和執行java程式時,我們的java程式呼叫了第三方的jar包,那麼編譯和執行的方法有兩種: 方法1: 編譯:javac -Djava.ext.dirs=E:\

java併發——執行緒池(一)執行機制如何使用

合理利用執行緒池能夠帶來三個好處。 1、第一:降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。 2、第二:提高響應速度。當任務到達時,任務可以不需要的等到執行緒建立就能立即執行。 3、第三:提高執行緒的可管理性。執

Java程式執行記憶體機制

# Java程式執行記憶體機制 棧記憶體包留呼叫方法、變數的區域,堆記憶體是new物件的區域,方法區為儲存class檔案的區域。 程式剛開始時,先載入類檔案相應的資料到方法區,然後就從`main()`方法開始執行。執行`main()`方法,`main()`方法入棧,執行`phone one = new P

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

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