1. 程式人生 > >深入理解Java虛擬機器(0)——JVM基本介紹

深入理解Java虛擬機器(0)——JVM基本介紹

1、什麼是JVM?

    我們知道Java程式碼可以一次編寫,到處執行(Write once,run anywhere),而這一特性正是JVM提供的。JVM幫工程師遮蔽了不同平臺的差異性,提供了一致的編寫介面。

    我們編寫的程式碼首先被編譯器 編譯成 符合JVM規範的class檔案,然後JVM就是負責載入這個class檔案,分配記憶體空間然後執行位元組碼。

    注意:JVM只是一個平臺,不僅僅支援Java語言,目前還支援:scala、Cloure、JRuby等新型語言,只要編譯出來的class檔案符合JVM規範,即可被JVM解釋執行。

2、什麼是JDK、JRE?

JDK(Java Development Kit):是用於支援Java程式開發的最小環境,包括 Java程式設計語言、Java虛擬機器、Java API類庫 這三部分。在JDK的安裝目錄下有一個jre目錄,裡面有兩個資料夾bin和lib,可以這麼認為:其中bin裡的就是jvm,lib就是jvm工作所需要的類庫,而jvm + lib類庫就成為JRE。

JRE(Java Runtime Environment):Java執行環境,支援Java程式執行的標準環境。包含JVM的標準實現及Java核心類庫。這是一個執行環境,而不是一個開發環境,所以沒有包含任何開發工具(如編譯器和偵錯程式)。

3、JVM的架構

如上圖所示,JVM結構由3部分構成:

  • 類載入器子系統

  • 執行時資料區

  • 執行引擎

一個JVM就是一個程序。

相關推薦

深入理解Java虛擬機器0——JVM基本介紹

1、什麼是JVM?     我們知道Java程式碼可以一次編寫,到處執行(Write once,run anywhere),而這一特性正是JVM提供的。JVM幫工程師遮蔽了不同平臺的差異性,提供了一致的編寫介面。     我們編寫的程式碼首先被編譯器 編譯成 符合

深入理解Java虛擬機器——JVM整體結構與垃圾回收演算法介紹

JVM整體架構 •JVM(虛擬機器):指以軟體的方式模擬具有完整硬體系統功能、執行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟體實現。常用的虛擬機器有VMWare,Virtual Box,Ja

深入理解Java虛擬機器——JVM效能調優監控工具

Jinfo 檢視正在執行的Java應用程式的擴充套件引數 檢視jvm的引數 檢視java系統引數 Jstat jstat命令可以檢視堆記憶體各部分的使用量,以及載入類的數量。命

深入理解java虛擬機器----jvm記憶體模型

最近大致的學習了一下jvm的相關技術,發現深入理解java虛擬機器這本書很不錯,所以想將這本書的內容的重難點在blog總結一下,一是為了鞏固這些知識,二是為了把這些重點單獨寫出來,讓初學者在學習的時候有一個大致的框架以至於學起來不至於那麼迷茫 學習java虛擬

深入理解java虛擬機器位元組碼指令簡介

Java虛擬機器指令是由(佔用一個位元組長度、代表某種特定操作含義的數字)操作碼Opcode,以及跟隨在其後的零至多個代表此操作所需引數的稱為運算元 Operands 構成的。由於Java虛擬機器是面向運算元棧而不是暫存器的架構,所以大多數指令都只有操作碼,而沒有運算元。 位元組碼指令集是一種具有鮮明特點、

深入理解java虛擬機器java虛擬機器的記憶體區域

一、 java虛擬機器記憶體區域主要有:方法區、堆、虛擬機器棧、本地方方法棧、程式計數器     按照執行緒私有和共有來分:執行緒私有的有--程式計數器,虛擬機器棧,本地方法棧。共有的有--本地方法區,堆     1、程式計數器:主要功能是控制程式

深入理解Java虛擬機器5Java記憶體模型

深入理解Java虛擬機器(5)Java記憶體模型 Java記憶體模型 主記憶體和工作記憶體 volatile關鍵字 long與double型別的特殊規則 synchronized關鍵字 Java記憶體模

深入理解java虛擬機器java的記憶體區域

程式計數器:可以看作當前執行緒所執行的位元組碼的行號指示器,位元組碼直譯器工作時就是通過改變這個計數器的值來選取下一條 需要執行的位元組碼指令,分支、迴圈、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴這個計數器來實現。每一個執行緒都有一個獨立的程式計數器,各個執行緒之間的計數器互不影響,獨立

深入理解 Java 虛擬機器方法呼叫

方法呼叫 方法呼叫不等同於方法執行,方法呼叫階段唯一任務就是確定被呼叫方法的版本(即呼叫哪一個方法),暫時還不涉及方法內部的具體執行過程。一切方法呼叫在 Class 檔案裡面儲存的都只是符號引用,需要在類載入期間,甚至到執行期間才能確定目標方法的直接引用。

深入理解Java虛擬機器--- JavaJVM

Java 特性 1.結構嚴謹,面向物件程式語言 2.跨平臺性 3.較安全的記憶體管理和訪問機制(避免了絕大部分記憶體洩漏和指標越界的問題) 4.實現熱點程式碼檢測和執行時編譯優化 5.擁有一套完整的API介面 6.擁有豐富的第三方庫 JVM 特性 基於棧

深入理解Java虛擬機器——類載入器深入解析

類載入過程 •類載入:類載入器將class檔案載入到虛擬機器的記憶體  •載入:在硬碟上查詢並通過IO讀入位元組碼檔案 •連線:執行校驗、準備、解析(可選)步驟 •校驗:校驗位元組碼檔案的正確性

深入理解java虛擬機器

前言  本篇主要講述java記憶體區域的劃分。下面直接進入正題。 概述 java虛擬機器就是在真實物理機上虛擬出來的一臺計算機,java語言有一個特點就是可以跨平臺,其中java起著關鍵作用。這是因為它遮蔽與平臺相關的資訊,java原始檔經過編譯程式編譯後生成位元組碼檔

深入理解java虛擬機器

前言 上篇已經介紹到記憶體結構劃分《深入理解java虛擬機器一》,本篇將介紹jvm記憶體分配。 正文 這裡主要介紹物件記憶體的分配,而物件是在堆中分配記憶體的,堆可以分為新年代和老年代,其中新年代可以劃分為Eden區和Survivor區,而Survivor又可以進一步劃

深入理解java虛擬機器

前言  上篇已經介紹到記憶體結構劃分《深入理解java虛擬機器二》本篇主要講述JVM垃圾回收機制。下面直接進入正題。 正文 JVM垃圾回收機制收集的是死亡的物件,也是就是沒有任何引用的物件。那怎麼判斷物件是否死亡。 引數計數演算法 引數計數演算法會給每個物件新增一個

深入理解java虛擬機器一個類載入器只初始化一次類物件,不同類載入器可以對同一類物件進行初始化

package com.ygl; class Final{public static final int x=6/3;//此處x在編譯時能計算出值,是編譯時的常量,則System.out.println(Final.x);直接輸出值,不再執行下面static(前提是fina

深入理解java虛擬機器十三 Java 即時編譯器JIT機制以及編譯優化

在部分的商用虛擬機器中,Java 程式最初是通過直譯器( Interpreter )進行解釋執行的,當虛擬機發現某個方法或程式碼塊的執行特別頻繁的時候,就會把這些程式碼認定為“熱點程式碼”。為了提高熱點程式碼的執行效率,在執行時,即時編譯器(Just In Time Com

深入理解java虛擬機器java記憶體區域記憶體結構劃分

圖一:java記憶體結構劃分 由上圖可知,java記憶體主要分為6部分,分別是程式計數器,虛擬機器棧,本地方法棧,堆,方法區和直接記憶體,下面將逐一詳細描述。 1、程式計數器 執行緒私有,即每個執行緒都會有一個,執行緒之間互不影響,獨立儲存。 代表著當前執行緒所執行

深入理解JAVA虛擬機器虛擬機器類載入機制

虛擬機器把描述類的資料從Class檔案載入到記憶體,並對資料進行校驗、轉換解析和初始化,最終形成可以被虛擬機器直接使用的Java型別,這就是虛擬機器的類載入機制。在Java語言裡面,型別的載入、連線和初始化過程都是在程式執行期間完成的。 1、類載入的時機 類從被載入到虛擬機

深入理解Java虛擬機器----位元組碼執行引擎

    位元組碼執行引擎是執行引擎是最重要的一部分,概念模型的總體外觀是一致的:輸入位元組碼,過程是位元組碼解析的等效過程,輸出結果。不同的虛擬機器有不同的具體實現,大體有解釋執行和編譯執行兩種選擇。 執行時棧幀結構:     棧楨在虛擬機器棧中,是支援方法呼叫和執行的結

深入理解java虛擬機器類載入的時機

Class 檔案中描述的各種資訊都必須載入到虛擬機器中才能執行和使用。而虛擬機器怎麼載入這些Class 檔案呢?Class 檔案進入到虛擬機器中會發生什麼變化呢? 虛擬機器類載入機制是指 虛擬機器把描述類的資料從 Class 檔案載入到記憶體中,並對資料進行校驗、轉換解析、