1. 程式人生 > 實用技巧 >jvm基礎+調優+面試題

jvm基礎+調優+面試題

JVM學習第一天

java程式設計師在學學習開發中遇到的問題!!!!(是不是很有同感)!!!

image-20200525152126041 image-20200525152439449

虛擬機器概述

image-20201007202722539 image-20201008131517800 image-20201007202825896 image-20201007202914256

生命週期

image-20201007203208494 image-20201007203246690

JVM發展歷程

image-20201007203344913 image-20201007203413839 image-20201007203447272 image-20201007203637877 image-20201007203830186

類載入器的作用

image-20201007210626068

類的載入過程

1.載入(Loading)
2.連線(Linking)
3.初始化(Initialization)
image-20201007212216854 image-20201007212656003 image-20201007213344117

類載入器分類

image-20201008121351462 image-20201008121425183 image-20201008121503702 image-20201008121621056 image-20201008121657825 image-20201008125908535

PC暫存器(程式計數器)

image-20201008133224284 image-20201008134131304

PC暫存器面試題

image-20201008134429988 image-20201008134804702

執行時資料區

記憶體中的棧和堆

image-20201008135509422 image-20201008140152566 image-20201008140518027

​ 特點:先進後出

佇列:先進先出

棧中結構:

棧記憶體溢位;自己掉自己

image-20201008141606018 image-20201008143142911 image-20201008143239751 image-20201008150248022 image-20201008150201020 image-20201008150410923 image-20201009160625523

image-20201011213856257 image-20201011213801910 image-20201012204809807 image-20201012205025916

物件分配過程

image-20201012205732774 image-20201012210352291 image-20201012212456096

記憶體分配策略

image-20201012214243132

堆空間引數設定

image-20201012214500510 image-20201012215408940 image-20201012215456748

總結

堆不是分配物件的唯一選擇,經過逃逸分析逃逸後的物件可以分配在棧上,但是目前逃逸分析技術並不成熟,無法保證逃逸分析的效能消耗一定能高於他的消耗。所有目前來說所有的物件分配還是在堆上

方法區

image-20201013122905925

常量池

image-20201013125717785 image-20201013125934777 image-20201013130449532 image-20201013131232781

常見面試題

image-20201013142805590 image-20201013142653616

建立物件的步驟

image-20201013151237047

String

image-20201013160800211

面試題

image-20201013161146052

image-20201013161517740

垃圾回收GC

image-20201013164022160

image-20201013164048645

image-20201013165000400

常用的垃圾回收演算法

標記階段:物件存活判斷

image-20201013213804907

引用計數演算法(java沒有使用,容易記憶體洩漏)

image-20201013214013404

可達性分析演算法(java選擇)

image-20201013215326931 image-20201013215453023

物件的finalization機制

image-20201013215738302

清除階段

標記清除演算法

image-20201014104243920 image-20201014105033685

複製演算法

image-20201014105919058

image-20201014105933861

標記壓縮演算法

image-20201014111936028

image-20201014112013174image-20201014112742806

其他

分代收集演算法

image-20201014112742806

增量收集演算法、分割槽演算法

引用(強引用,軟引用,弱引用,虛引用)

強引用(只要有引用,打死不回收,哪怕oom)

軟引用(記憶體不夠即回收)

弱引用(發現即回收)

虛引用(唯一目的就是能在這個物件被收集器回收時收到一個系統通知。)

image-20201014154832269

GC回收器

image-20201014160351926

image-20201014160936409 image-20201014161033302 image-20201014161346348 image-20201014161630911 image-20201014162027973 image-20201014162056908 image-20201014164517626 image-20201014164608259 image-20201014164714582 image-20201014164733288

小結

image-20201014161821290

image-20201014162445508

GC優化

//PicGo/image-20201014164714582.png" alt=“image-20201014164714582” style=“zoom:67%;” />

image-20201014164733288

小結

[外鏈圖片轉存中…(img-gwY8iFVN-1602665665148)]

image-20201014162445508

GC優化

image-20201014164923292