1、虛擬機運行時數(shù)據(jù)區(qū)
抽象概念别厘,內部實現(xiàn)依賴寄存器虱饿、主內存、高速緩存
計算器=指令+數(shù)據(jù)
指令相關:虛擬機棧触趴、本地方法棧氮发、程序計數(shù)器
數(shù)據(jù)相關:堆、方法區(qū)
2冗懦、線程私有區(qū)域(程序計數(shù)器爽冕、本地方法棧、虛擬機棧)
線程私有披蕉;隨線程的啟動而產(chǎn)生颈畸,線程的結束而消亡
程序計數(shù)器
是java虛擬機規(guī)范里面,?唯一 一個?沒有規(guī)定任何?OutOfMemoryError?情況的區(qū)域
記錄當前線程執(zhí)行的字節(jié)碼的行號指示器没讲,各線程之間相互獨立眯娱、互不影響。
作用:記錄線程執(zhí)行的字節(jié)碼行號食零,線程切換時,線程能正常執(zhí)行
本地方法棧
存放native方法
虛擬機棧
棧:一種數(shù)據(jù)結構寂屏,先進后出贰谣,和Java中調用方法的特性一致
設置棧大心嚷А:-Xss
查看字節(jié)碼指令:1、javac xx.java文件轉化為xx.class文件? 2吱抚、javap -v xx.class > 1.txt? 反編譯class文件保存到txt文件中 3百宇、查看txt文件中的字節(jié)碼指令
虛擬機棧是線程私有的,線程執(zhí)行時秘豹,每個方法對應一個棧幀携御,棧幀中存儲了局部變量表、操作數(shù)棧既绕、返回地址啄刹、動態(tài)連接、....凄贩,Java中方法的執(zhí)行就是對應著棧幀在虛擬機棧中入棧和出棧過程
局部變量表:存儲基本數(shù)據(jù)類型誓军、局部的對象存儲引用地址
操作數(shù)棧:存放方法執(zhí)行的操作數(shù),也是一個棧疲扎,可以操作任意數(shù)據(jù)類型昵时,方法的執(zhí)行就是操作這些數(shù)據(jù)入棧和出棧
動態(tài)連接:多態(tài),存放類加載椒丧、運行時才能確定的方法
返回地址:正常返回壹甥,程序計數(shù)器中的地址作為返回,異常壶熏,異常處理器表確定
3句柠、數(shù)據(jù)共享區(qū)域
堆
幾乎所有對象都存儲在該區(qū)域,也是垃圾回收的主要區(qū)域
參數(shù)調整:
-Xms:堆的最小值
-Xmx:堆的最大值
-Xmn:新生代的大小
-XX:NewSize? 新生代最小值
-XX:MaxNewSIze 新生代最大值
方法區(qū)
靜態(tài)變量久橙、常量俄占、類信息、即時編譯期編譯后的代碼
4淆衷、虛擬機中對象的初始化
檢查加載-內存分配(指針碰撞缸榄、空閑列表、并發(fā)安全祝拯、CAS機制)-內存空間初始化-設置-對象初始化
5甚带、對象的訪問定位
句柄
直接指針
6、逃逸分析
虛擬機提供的優(yōu)化技術佳头,對于線程私有的對象分配在棧上鹰贵,而不分配在堆上。跟隨著方法的調用創(chuàng)建或者銷毀康嘉,不需要垃圾回收碉输,提升性能。
逃逸分析的目的是判斷對象的作用域是否會逃逸出方法體亭珍,不會逃出方法體時敷钾,將對象存儲在棧中枝哄,提升性能。
-server JVM運行的模式之一, server模式才能進行逃逸分析阻荒,JVM運行的模式還有mix/client
-Xmx10m和-Xms10m:堆的大小
-XX:+DoEscapeAnalysis:啟用逃逸分析(默認打開)
-XX:+PrintGC:打印GC日志
-XX:+EliminateAllocations:標量替換(默認打開)
-XX:-UseTLAB關閉本地線程分配緩沖