JVM Run-Time Data Areas & 參數(shù)相關

在這里插入圖片描述

jvm定義了各個運行時數(shù)據(jù)區(qū):

Run-Time Data Areas
     1)The pc Register
     2)Java Virtual Machine Stacks
     3)Heap
     4)Method Area
     5)Run-Time Constant Pool
     6)Native Method Stacks

運行時數(shù)據(jù)區(qū): <=== 是一個規(guī)范,內存結構是一個實現(xiàn)
1)部分運行時數(shù)據(jù)區(qū)域是在 jvm 創(chuàng)建時創(chuàng)建 銷毀時銷毀
2)部分運行時數(shù)據(jù)區(qū)域是每個Thread都有一個的,Thread創(chuàng)建時創(chuàng)建,Thread退出時銷毀
====> 有一些是共享的 获诈,有一些是獨享的

1)The pc Register 程序計數(shù)器 <=== 每個Thread獨有

說明:
會占用一小塊的內存,其實每個運行時數(shù)據(jù)區(qū)都會占用各自小塊內存
用于當前線程所執(zhí)行的字節(jié)碼的 行號指示器
用于記錄每個線程目前執(zhí)行到 哪里了:你的代碼所對應的哪一條 字節(jié)碼指令

多個線程并發(fā)執(zhí)行時候,多個線程cpu資源搶占皂林,每一個線程都有自己的程序計數(shù)器,進而得到cpu資源時候才知道執(zhí)行到哪的了

不同的字節(jié)碼指令做不同的事情蚯撩,字節(jié)碼指令是.java文件編譯而來的

字節(jié)碼文件查看方式:javap -verbose HelloWorld.class >> HelloWorld.txt

沒有構造器础倍,自帶一個默認的空的構造器


2)Java Virtual Machine Stacks <=== 每個Thread獨有

     存: 用于存放方法里面的一些局部變量
     存: frames: 棧幀
          A new frame is created each time a method is invoked
          A frame is destroyed when its method invocation completes

          入棧:方法被調用
          出棧:方法執(zhí)行完
可能會出現(xiàn)的異常:
If the computation in a thread requires a larger Java Virtual Machine stack than is permitted, the Java Virtual Machine throws a StackOverflowError. 

即出現(xiàn)情況:線程中的計算需要的 大于 Java Virtual Machine Stacks所允許的
    分析:Java Virtual Machine Stacks 存放的東西是與我們的方法相關聯(lián)的
         調用方法時,會為每個方法創(chuàng)建Frame,入棧
         方法執(zhí)行執(zhí)行完畢胎挎,F(xiàn)rame出棧

         遞歸沒出口的時候沟启,就會不停的入棧入棧,就會一直壓壓壓犹菇,但是Java Virtual Machine Stacks這個的大小是一定的德迹,就會

StackOverflowError

3)Heap 堆 <== 所有 jvm Thread 共享的

    創(chuàng)建對象實例 new Student() 
    存: 對象實例和數(shù)組
    OutOfMemoryError
If a computation requires more heap than can be made available by the automatic storage management system, the Java Virtual Machine throws an OutOfMemoryError.

即出現(xiàn)情況:計算需要的堆 大于 自動存儲管理系統(tǒng)可用的堆

4)Method Area 方法區(qū)域 <== Thread 共享的
注意:1.8 Metaspace 元數(shù)據(jù) : 存放與.class 相關的一些信息

constant pool, 
field and method data, 
and the code for methods 
and constructors, 

即: .class字節(jié)碼文件會被加載進來

If memory in the method area cannot be made available to satisfy an allocation request, the Java Virtual Machine throws an OutOfMemoryError.

即:如果無法使方法區(qū)域中的內存滿足分配請求,則Java虛擬機將拋出OutOfMemoryError揭芍。

5)Run-Time Constant Pool <== Thread 共享的

6)Native Method Stacks 本地方法棧 <=== 每個Thread獨有
Object 類里面許多方法就是navite修飾的胳搞,
當調用Navite修飾的方法的時候,每個線程就會有一個本地方法棧
調用底層的,C等

方法: 
    navite 的
    非navite的

前面都是JVM的6大區(qū)域肌毅,接下來這一個不屬于JVM的:
DirectByteBuffer <== java.nio 包
堆外內存 Spark 直接操作內存空間
Spark SQL筷转?
鎢絲java

直接操作內存空間,性能好悬而,如果去調用底層源碼是可以的

啟動起來呜舒,就是一個JVM進程

----------------------------------------------------華麗分割線---------------------------------------------------


在這里插入圖片描述

JDK7: 永久代
JDK8: Metaspace 元空間
JVM參數(shù)類型:
1)標準: 穩(wěn)定
2)X: 相對變化少的
3)XX : jvm調優(yōu)的重點
a)boolean : -XX[+/-] name <==啟動 禁用

        -XX:+UserG1GC
    b)非boolean :  -XX:name = value

java -Xint -version
java -Xcomp -version

3)XX : jvm調優(yōu)的重點
啟動一個java進程
jps 查看進程IP

【jinfo 】
用于查看正在運行的JVM參數(shù):
語法:jinfo -flag name pid
jinfo -flag PrintGCDetails pid
結果:可以看到是否開啟打印GC的參數(shù)
jinfo -flag UseG1GC pid
結果:默認是沒有開啟的,說明JDK8默認不是使用G1作為垃圾回收器的

調整 VM options : -XX:+PrintGCDetails

【元空間大小】
jinfo -flag MetaspaceSize pid
-XX:MetaspaceSize=21807104 大約20M

調整 VM options : -XX:MetaspaceSize=128m

【新生代 老年代】 <== 默認每次GC 年齡會+1
jinfo -flag MaxTenuringThreadshold pid
默認:15

【jinfo 更多】
jinfo -flag InitialHeapSize pid
結果:初始堆大小
jinfo -flag MaxHeapSize pid
結果:最大堆大小

jinfo -flags pid
結果:打出一堆VM參數(shù)

【PrintFlags系列】
-XX:+PrintFlagsInital
-XX:+PrintFlagsFinal

jinfo -XX:+PrintFlagsInital -version > temp.txt
結果:
= 表示默認值
:= 表示修改過的

【幾個特殊的XX參數(shù)】
-Xmx : JVM堆的最大值 -XX:MaxHeapSize 初始化是機器內存的1/4
-Xms : JVM堆的最小值 -XX:InitialHeapSize 初始化是機器內存的1/64

    最佳實踐:調整為一樣的大小笨奠,防止內存抖動
    調整 VM options : -Xms10m -Xmx10m
        jinfo -flag InitialHeapSize pid
        結果:初始堆大小
        jinfo -flag MaxHeapSize pid
        結果:最大堆大小

-Xss -XX:ThreadStackSize

jinfo -flag ThreadStackSize pid


User user = new User();
引用(棧) 對象(堆)

User.class(metaspace)


一流的企業(yè)做規(guī)范
二流企業(yè)做產品
三流企業(yè)做產品
四流企業(yè)做服務
五流企業(yè)做項目


5個異常
5個JVM參數(shù)

----------------------------------------------------華麗分割線---------------------------------------------------

選用合適的垃圾回收器很重要

開啟ccs就是短指針
每new 一個對象袭蝗,都會有一個指向自己class的指針,class是在metaspace里面
默認是64位的長指針般婆,考慮性能到腥,可以修改為32位的短指針

在這里插入圖片描述

【jstat -gc pid 】
打出常用用法: jstat -options

demo:
調整 VM options: -Xms128m -Xmx128m -XX:MetaspaceSize=128m -XX:+UseCompressedClassPoint
jstat -gc pid
結果:關注 CCSC CCSU 是有值的 再就是關注MC MU :metaspace 總共大小,用掉的大小

調整 VM options: -Xms128m -Xmx128m -XX:MetaspaceSize=128m -XX:-UseCompressedClassPoint
jstat -gc pid
結果:關注 CCSC CCSU 均為0腺兴,關閉ccs,就不存在ccs的概念了左电,64位的就是存在metaspace 里面, 這時候再就是關注MC MU页响,MC = MC(上面) + CCSC(上面)

調整 VM options: -Xms128m -Xmx128m -XX:MetaspaceSize=128m -Xint -XX:-UseCompressedClassPoint
即:默認是comp 編譯執(zhí)行代碼篓足,這里修改為解析執(zhí)行
jstat -gc pid
結果:關注,MC 闰蚕,會發(fā)現(xiàn)比默認的編譯執(zhí)行 總的元空間小

----------------------------------------------------華麗分割線---------------------------------------------------

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末栈拖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子没陡,更是在濱河造成了極大的恐慌涩哟,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盼玄,死亡現(xiàn)場離奇詭異贴彼,居然都是意外死亡,警方通過查閱死者的電腦和手機埃儿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門器仗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人童番,你說我怎么就攤上這事精钮。” “怎么了剃斧?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵轨香,是天一觀的道長。 經常有香客問我幼东,道長臂容,這世上最難降的妖魔是什么科雳? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮策橘,結果婚禮上炸渡,老公的妹妹穿的比我還像新娘娜亿。我一直安慰自己丽已,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布买决。 她就那樣靜靜地躺著沛婴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪督赤。 梳的紋絲不亂的頭發(fā)上嘁灯,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音躲舌,去河邊找鬼丑婿。 笑死,一個胖子當著我的面吹牛没卸,可吹牛的內容都是我干的羹奉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼约计,長吁一口氣:“原來是場噩夢啊……” “哼诀拭!你這毒婦竟也來了?” 一聲冷哼從身側響起煤蚌,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耕挨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尉桩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筒占,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年蜘犁,在試婚紗的時候發(fā)現(xiàn)自己被綠了翰苫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡沽瘦,死狀恐怖革骨,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情析恋,我是刑警寧澤良哲,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站助隧,受9級特大地震影響筑凫,放射性物質發(fā)生泄漏滑沧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一巍实、第九天 我趴在偏房一處隱蔽的房頂上張望滓技。 院中可真熱鬧,春花似錦棚潦、人聲如沸令漂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叠必。三九已至,卻和暖如春妹窖,著一層夾襖步出監(jiān)牢的瞬間纬朝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工骄呼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留共苛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓蜓萄,卻偏偏與公主長得像隅茎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绕德,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容

  • 1. JVM參數(shù)分類 標準參數(shù)(-)患膛,所有的JVM實現(xiàn)都必須實現(xiàn)這些參數(shù)的功能,而且向后兼容耻蛇; 非標準參數(shù)(-X)...
    Coding小聰閱讀 2,285評論 0 0
  • 前言 昨天謝照東大神在群里提出一個問題:怎么查看Metaspace里具體包含的是什么踪蹬,起因是他的某個服務設置了-X...
    阿飛的博客閱讀 100,974評論 14 75
  • 作者:一字馬胡 轉載標志 【2017-11-12】 更新日志 日期更新內容備注 2017-11-12新建文章初版 ...
    beneke閱讀 2,205評論 0 7
  • 最近朋友圈被《啥是佩奇》這個微電影刷屏了,看了之后心頭既開心有莫名的酸楚臣咖。但是她為什么那么火呢跃捣? 視頻主要講述了生...
    俊濤聲依舊閱讀 288評論 1 0
  • 2019年4月2O日 星期六 晴 今天雖然是周六,但是兒子依然像往常一樣早早起床夺蛇,先做完一份試卷疚漆,然后吃早飯〉笊猓考試...
    五三班李玉涵媽媽閱讀 49評論 0 1