1. 程式人生 > >Java教程02—Java虛擬機器(JVM)、和JDK,JRE之間的區別

Java教程02—Java虛擬機器(JVM)、和JDK,JRE之間的區別

JVM主要功能

Java是一種高階程式語言。
用高階語言編寫的程式不能直接在任何機器上執行。
首先,需要將其翻譯成特定的機器語言,javac編譯器就專門來幹這個事兒的,它把Java程式(含有的.java原始碼檔案)轉換成機器程式碼(稱為位元組碼或.class檔案)。

Java虛擬機器(JVM)是安裝在我們計算機中的虛擬機器,JVM自己的機器語言是位元組碼。
這樣子Javac編譯器就好處理啦,因為它只需要為JVM生成位元組碼就行了,而不是為每種型別的機器生成不同的機器程式碼。

JVM執行Javac編譯器生成的位元組碼並生成輸出就OK了。JVM正是java跨平臺的原因。
所以,現在我們知道JVM的主要功能是執行編譯器生成的位元組碼

每個作業系統都有不同的JVM,但是在執行位元組碼後它們產生的輸出在所有作業系統中都是相同的。
這意味著在Windows上生成的位元組程式碼可以在Mac OS上執行,反之亦然。
這就是我們將java稱為平臺無關語言的原因,下圖展示了這個過程:
這裡寫圖片描述

JVM總結:
Java虛擬機器(JVM)是在實際機器(您的計算機)上執行並執行Java位元組程式碼的虛擬機器。
JVM不瞭解Java原始碼,這就是為什麼我們需要使用javac編譯器來編譯* .java檔案, 從而獲取包含JVM理解的位元組程式碼的* .class檔案。
JVM使java可移植(一次編寫,隨處執行)。
每個作業系統都有不同的JVM,但是在執行位元組程式碼後它們產生的輸出在所有作業系統中都是相同的。

JVM結構

來張JVM的結構圖:
這裡寫圖片描述
讓我們看看JVM是如何工作的:
Class Loader(類載入器): 類載入器讀取.class檔案並將位元組碼儲存在方法區中。

Method Area(方法區域):JVM中只有一個方法區域,它在所有類之間共享。這各區域儲存了每個.class檔案的類的級別資訊。

Heap(堆): 堆是為物件分配記憶體佔用的JVM記憶體的一部分。JVM為每個.class檔案建立一個類物件。

Stack(棧):棧也是JVM記憶體的一部分,但與Heap不同,它用於儲存臨時變數。

PC Registers(PC暫存器): 這可以跟蹤已執行的指令以及將要執行的指令。由於指令由執行緒執行,因此每個執行緒都有一個單獨的PC暫存器。

Native Method stack(Native Method 棧): 一個native method(非Java語言實現的方法)可以訪問虛擬機器的執行時資料區域。.

Native Method interface(Native Method 介面): 它使java程式碼能夠被本機應用程式呼叫或被呼叫。本機應用程式是特定於系統的硬體和作業系統的程式。

Garbage collection(垃圾收集):類程式碼由java程式碼顯式建立,在使用後,它會被垃圾收集自動銷燬以進行記憶體管理。

JVM與JRE與JDK區別

JRE:JRE是java虛擬機器執行的環境。JRE包含Java虛擬機器(JVM),類庫和其他檔案,不包括編譯器和偵錯程式等開發工具。
這意味著您可以在JRE中執行程式碼,但無法在JRE中開發和編譯程式碼。

JVM:如上所述,JVM通過使用JRE提供的類,庫和檔案來執行程式。
這裡寫圖片描述

JDK:JDK是JRE的超集,它包含JRE與開發工具(如編譯器,偵錯程式等)的所有內容。
這裡寫圖片描述

相關推薦

Java教程02Java虛擬機器JVMJDKJRE之間區別

JVM主要功能 Java是一種高階程式語言。 用高階語言編寫的程式不能直接在任何機器上執行。 首先,需要將其翻譯成特定的機器語言,javac編譯器就專門來幹這個事兒的,它把Java程式(含有的.java原始碼檔案)轉換成機器程式碼(稱為位元組碼或.c

java虛擬機器JVM

1.jvm虛擬機器概述和基本概念  (虛擬機器分為系統虛擬機器-》(VirtualBox   VMware ==)  和 程式虛擬機器-》(JVM  DVM == )   )    1.1什麼是jvm      &n

JAVA虛擬機器JVM劃重點 第二章 Java記憶體區域與記憶體溢位異常 之 虛擬機器物件

本部落格參考《深入理解Java虛擬機器》(第二版)一書,提取重點知識,再加以個人的理解編寫而成。轉載請標明來源。 JAVA虛擬機器(JVM)劃重點 第二章 Java記憶體區域與記憶體溢位異常 之 虛擬機器物件 Java物件的建立 1、類載入過程

JAVA虛擬機器JVM劃重點 第二章 Java記憶體區域與記憶體溢位異常 之 執行時資料區域

本部落格參考《深入理解Java虛擬機器》(第二版)一書,提取重點知識,再加以個人的理解編寫而成。轉載請標明來源。 JVM劃重點 第二章 Java記憶體區域與記憶體溢位異常 之 執行時資料區域 概述 執行時資料區域 程式計數器 Java虛擬機

面試中關於Java虛擬機器jvm的問題看這篇就夠了

最近看書的過程中整理了一些面試題,面試題以及答案都在我的文章中有所提到,希望你能在以問題為導向的過程中掌握虛擬機器的核心知識。面試畢竟是面試,核心知識我們還是要掌握的,加油。 下面是按jvm虛擬機器知識點分章節總結的一些jvm學習與面試相關的一些東西。一般作為Java程式設

什麼是java虛擬機器JVM

什麼是java虛擬機器(JVM)? Java虛擬機器是一個可以執行Java位元組碼的虛擬機器程序。Java原始檔被編譯成能被Java虛擬機器執行的位元組碼檔案。 為什麼Java可以實現所謂的“一次編寫,到處執行”,主要是因為虛擬機器的存在。Java虛擬機器負責Java程式設計語言

詳細介紹Java虛擬機器JVM

1. JVM生命週期 啟動。啟動一個Java程式時,一個JVM例項就產生了,任何一個擁有public static void main(String[] args)函式的class都可以作為JVM例項執行的起點。 執行。main()作為該程式初始執行緒的起點,任何其他執行

究竟什麼是Java虛擬機器JVM

我們都知道,在Windows上,軟體包字尾有exe,而蘋果的Mac OS X系統上沒有安裝exe。類似地,Mac OSX系統上的軟體安裝包是dmg字尾,不能安裝在Windows系統上。 為什麼不能安裝不同系統上的軟體,因為作業系統的底層實現是不同的。對於Windows系統,exe字尾的軟體程式碼

JAVA虛擬機器JVM——類載入的時機之類的初始化

類的生命週期 從類被載入到虛擬機器記憶體中開始,到卸載出記憶體為止,它的整個生命週期包括如上的7個階段。其中,驗證、準備、解析這三個部分又被統稱為“連線(Linking)。類的載入過程必須按照這種順序按部就班的開始,而解析階段則不一定,它在某些情況

Java虛擬機器JVM引數配置說明

如果你要在J2EE環境中配置這些引數,那麼你需要在J2EE應用伺服器或者Servlet容器相關啟動引數設定處指定,其啟動檔案中來配置,Tomcat是在catalina.bat中配置,weblogic和websphere是在其他地方,具體我就說了,相信玩過的這些大型伺服器的人都知道,沒玩過的看看這篇文章,玩玩

JAVA虛擬機器JVM——類載入的過程載入驗證準備解析初始化

載入 “載入”是”類載入”過程的一個階段。在載入階段,虛擬機器需要完成以下3件事情: 1.通過一個類的全限定名來獲取定義此類的二進位制位元組流。 2.將這個位元組流所代表的靜態儲存結構轉化為方法區的執行時資料結構。 3.在記憶體中生成一個代表這個類的java

JAVA虛擬機器JVM——虛擬機器位元組碼執行引擎

方法呼叫 方法呼叫並不等同於方法執行,方法呼叫階段唯一的任務就是確定呼叫哪一個方法,暫時還不涉及方法內部的具體執行過程。Class檔案的編譯過程中不包含傳統編譯中的連線步驟,一切方法呼叫在C

Java虛擬機器JVM執行時記憶體區域劃分詳解

Java虛擬機器(JVM)記憶體區域劃分詳解 最近一直沒有怎麼更新自己的部落格,主要是由於老哥公司最近的一個招標專案忙得焦頭爛額,心力憔悴(ಥ_ಥ),趁著專案的空檔期來重構一下以前的一篇關於jvm記憶體區域劃分的部落格,仔細閱讀了一下之前的部落格,大量的文字敘

Java虛擬機器JVM中的記憶體設定詳解

在一些規模稍大的應用中,Java虛擬機器(JVM)的記憶體設定尤為重要,想在專案中取得好的效率,GC(垃圾回收)的設定是第一步。 PermGen space:全稱是Permanent Generation space.就是說是永久儲存的區域,用於存放Class和Meta資

Java跨平臺原理與Java虛擬機器JVM

># Java跨平臺原理(位元組碼檔案、虛擬機器) **C/C++語言都直接編譯成針對特定平臺機器碼。如果要跨平臺,需要使用相應的編譯器重新編譯。** **Java源程式(.java)要先編譯成與平臺無關的位元組碼檔案(.class),然後位元組碼檔案再解釋成機器碼執行。解釋是通過Java虛擬機器來執行的。

我看Java虛擬機器7---直譯器JIT編譯器

Java是被定為為解釋性語言,JIT編譯器並不是強制需要的,也並非所有的虛擬機器都是用直譯器+編譯器的並存架構。但主流的商用虛擬機器如Hotspot、J9等都採用這種並存的架構。 直譯器和編譯器比較 直譯器優點:省去編譯時間,啟動速度快 編譯器優點:對程式

學習虛擬機器jvm必須知道的東西

我一共寫了兩篇部落格,這一篇是為了讓大家頭腦清楚,哪些重要,如果誰有不懂得https://blog.csdn.net/weixin_40078053/article/details/80546846這是我的另一篇部落格,對虛擬機器有詳細介紹,當然啦,滿滿全是乾貨,總結,否則看

Java8虛擬機器JVM記憶體溢位實戰

前言 相信很多JAVA中高階的同學在面試的時候會經常碰到一個面試題 你是如何在工作中對JVM調優和排查定位問題的? 事實上,如果使用者量不大的情況下,在你的程式碼還算正常的情況下,在工作中除非真正碰到與JVM相關的問題是少之又少,就算碰到了也是由公司的一些大牛去排查解決,那麼我們又如何積累這方面的經驗呢?下

Java虛擬機器JVM原始碼:JDK10對Java虛擬機器執行時資料區的劃分詳細圖解

Java虛擬機器執行時資料區 為什麼要研究這個,因為JDK都已經發布到10了,必須要更新自己對Java虛擬機器新的認識。 一、執行時資料區的劃分 1.1 官方劃分 關於JDK10對執行時資料區的劃分,在官方文件說的非常清楚。 學習技術,一定要學會看第一手資料。 Ja

Java虛擬機器JVM原始碼:搭建OpenJDK(10)原始碼除錯環境

為什麼要自己除錯 在前面的文章,已經介紹了如何編譯自己的OpenJDK。 但是光擁有了自己的JDK版本肯定是不夠的。 為了深入瞭解Java例項的建立、初始化和執行流程以及內部實現原理,DEBUG是必不可少的必殺技。 所以,作為搞技術的有必要學習如何除錯JVM原始碼。