原创 28.JVM運行時數據區之堆區概述

目錄1.堆(Heap)核心概述2.堆與棧、方法區之間的關係3.堆的內存細分 1.堆(Heap)核心概述 堆是JVM運行時數據區中的重點內容。 1.堆區是進程私有的。一個進程對應一個JVM實例。一個JVM實例中有一個Runtime實

原创 26.Java本地方法的理解(native方法)

目錄1.什麼是本地方法?2. 爲什麼要使用Native method? 1.什麼是本地方法? 本地方法就是java代碼裏面寫的native方法,它沒有方法體。是爲了調用C/C++代碼而寫的。在JNI程序裏面使用。 例子: 下面的代

原创 27.JVM運行時數據區之本地方法棧

目錄1.本地方法棧 1.本地方法棧 1.Java虛擬機棧用於Java方法的調用,而本地方法棧用於本地方法的調用。 2.線程私有。 3.同樣會存在StackOverflow和OOM。 4.並不是所有的JVM都支持native方法,

原创 29.JVM堆空間大小的設置和查看

目錄1.堆空間大小的設置2.堆空間大小的查看 1.堆空間大小的設置 設置堆空間大小的參數 -Xms 用來設置堆空間(年輕代+老年代)的初始內存大小。 -X 是jvm的運行參數 ms 是memory start -Xmx 用來設

原创 22.5種方法調用指令-invokestatic,invokespecial,invokevirtual,invokeinterface,invokedynamic

目錄1.虛方法與非虛方法2. 5種調用指令 1.虛方法與非虛方法 1.靜態方法、私有方法、final方法、實例構造器、父類方法都是非虛方法,其他方法都是虛方法。 2. 5種調用指令 a)invokestatic b)invoke

原创 20.JVM棧幀的內部結構-動態鏈接(Dynamic Linking)

目錄1.動態鏈接(指向運行時常量池的方法引用) 1.動態鏈接(指向運行時常量池的方法引用) 1.動態鏈接又稱爲指向運行時常量池的方法引用。 2.一個方法對應一個棧幀。每一個棧幀中都包含一個指向運行時常量池中該棧幀所屬方法的引用。

原创 23.方法重寫的本質與虛方法表的使用

目錄1.方法重寫的本質與虛方法表的使用 1.方法重寫的本質與虛方法表的使用 下面的圖片主要講的是當子類重寫了父類的一個方法的時候,當調用被重寫的方法的時候,會先去子類中找有沒有,如果沒有就去它的父類找。這樣會存在一個循環查找的過程

原创 24.JVM棧幀的內部結構-方法返回地址和一些附加信息

目錄1.方法返回地址2.一些附加信息(瞭解) 1.方法返回地址 1.存放調用該方法的PC寄存器的值。也就是存放下一條要執行的指令的地址。 2.方法正常執行完成,棧幀在出棧之前,會把方法返回地址返回給調用者,調用者就知道了下面應該執

原创 21.方法的綁定機制-靜態綁定與動態綁定

目錄1.靜態鏈接與動態鏈接2.早期綁定與晚期綁定 1.靜態鏈接與動態鏈接 符號引用轉換爲直接引用:就是將#2,#3等類似的符號引用轉換爲真正的引用的那個方法的過程。 靜態鏈接:被調用的方法在編譯期就可以確定下來。這種情況下,將符號

原创 25.虛擬機棧的一些面試題目

目錄1.虛擬機棧面試題目 1.虛擬機棧面試題目 1.棧溢出的情況? 會出現StackOverflow和OutOfMemory異常。 棧的大小可以通過-Xss設置。虛擬機棧可以使固定大小的或者是自動擴充的,如果是固定大小的,當棧空

原创 18.JVM變量槽Slot

1.JVM變量槽Slot的理解 1.Slot是局部變量表中最基本的存儲單元。 2.參數值的存放總是從局部變量表數組的index 0開始,到數組的-1的索引結束。 3.局部變量表中存放的是局部變量,包括8種基本數據類型,引用數據類型

原创 靜態變量與局部變量的對比

1.靜態變量與局部變量的對比 變量的分類: 按照數據類型分:① 基本數據類型 ② 引用數據類型 按照在類中聲明的位置分: ① 成員變量:在使用前,都經歷過默認初始化賦值。 類變量(靜態的成員變量): linking的prepar

原创 19.JVM棧幀的內部結構-操作數棧(Operand stack)

1.操作數棧 1.每一個獨立的棧幀中除了包含局部變量表以外,還包含一個後進先出的操作數棧。 2.操作數棧,在方法執行過程中,根據字節碼指令,往棧中寫入數據或提取數據,即入棧和出棧操作。 3.操作數棧主要用於保存計算過程的中間結果

原创 17.字節碼中方法內部結構分析-Jclasslib的使用

1.使用Jclasslib分析字節碼中的方法內部結構 1.安裝jclasslib bytecode viewer。進入https://github.com/ingokegel/jclasslib下載最新版的Jclasslib並且安

原创 15.JVM棧幀的內部結構

1.JVM棧幀的內部結構 棧幀存儲的數據可以分爲下面的5個部分: 1.局部變量表(重點) 2.操作數棧(重點) 3.動態鏈接,也稱爲指向運行時常量池的方法引用 4.方法返回地址,也稱爲方法退出或者異常退出的定義 5.一些附加信息