Java程序員:不識Jvm真面目,只緣身在增刪查改中

前言

JVM是java的核心和基礎,在java編譯器和os平臺之間的虛擬處理器。它是一種基於下層的操做系統和硬件平臺並利用軟件方法來實現的抽象的計算機,能夠在上面執行java的字節碼程序。java

java編譯器只需面向JVM,生成JVM能理解的代碼或字節碼文件。Java源文件經編譯器,編譯成字節碼程序,經過JVM將每一條指令翻譯成不一樣平臺機器碼,經過特定平臺運行。面試

這裏就給你們講一下JVM。算法

技術大咖帶你垂直打擊JVM設計模式

什麼是運行時數據區? 咱們一塊兒來分享。
瞭解JVM底層原理,讓你的代碼擼得飛起。
搞定內存溢出,漲薪升職。
漲見識,字節碼執行過程分析。
直擊真相,原理和代碼全都有。
測試、效果演示及總結。數組

JVM是什麼?

JDK: java development kit (Java開發工具包) 編譯、反編譯、調試等。多線程

JRE: java runtime enviroment (Java運行環境)架構

JVM: java Virtual Mechinal (Java虛擬機) 一次編寫,處處運行!併發

clipboard.png

學jvm的目就是:jvm

提高代碼質量、解決項目問題。分佈式

面試!面試!仍是面試!

JVM是怎麼玩的

類加載器:Class字節碼文件加載到內存

執行引擎:解析字節碼指令,獲得執行結果

運行時數據區

clipboard.png

JVM運行時數據區

線程私有
程序計數器
虛擬機棧
本地方法棧
線程共享

  • 列表項目

方法區

clipboard.png

BAT的JVM面試題

JVM什麼狀況下會發生棧內存溢出?

clipboard.png

JVM中一次完整的GC流程是怎樣的?
GC——垃圾回收
完整意味着有多種狀況
程序計數器
指向當前線程正在執行的字節碼指令的地址(行號)

棧是什麼?

棧(Stack)
入口和出口只有一個
入棧
出棧

FILO
先進後出

clipboard.png

虛擬機棧

虛擬機棧
建立一個線程就爲線程分配一個虛擬機棧,它又會包含多個棧幀,由於每運行一個方法就建立一個棧幀。
運行時纔有數據
棧幀
運行一個線程中的一個方法
1.局部變量表
2.操做數棧
3.動態鏈接
4.返回地址

clipboard.png

深刻理解虛擬機棧

演示一段代碼的方法的執行過程

代碼:

public int calc(){

int a=100;

int b=200;

int c=300;

return(a+b)*c;

}

clipboard.png

虛擬機棧的異常

StackOverFlowError異常
緣由:執行的虛擬機棧深度大於虛擬機棧容許的最大深度(方法的遞歸調用)。
解決辦法:增長默認棧的容量。
棧容量 -Xss 默認1M

OutOfMemeoryError異常
緣由:多線程環境下虛擬機在擴展棧時沒法申請到足夠的內存空間。
解決辦法:減小默認棧的容量來換取更多的線程支持。

clipboard.png

JVM中線程共有的內存區域

Java堆
Java堆是被全部線程共享的一塊內存區域
全部的對象實例以及數組要在堆上分配

元數據區
老版本名稱:方法區(永久代)
類信息、常量、編譯後的代碼信息

直接內存

clipboard.png

以上源於一個視頻講解的概述總結,後續將分享後半部分的內容:

可達性分析算法——GC Roots
JVM中的堆
新生代爲何分三個區?
新生代對象的分配和回收
老年代對象的分配和回收
JVM中一次完整的GC流程是怎樣的?

**若是有興趣想了解視頻具體內容的能夠關注我,加入個人合做羣(805685193)便可獲取原視頻。還有一些Java架構視頻講解,須要獲取Dubbo、Redis、設計模式、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術視頻教程資料,架構思惟導圖,和BATJ面試題及答案的,都是免費分享的。關注我,加入個人合做羣(805685193)便可獲取視頻。**

相關文章
相關標籤/搜索