JVM使用記錄

JVM說(shuō)明

Java虛擬機(jī)在運(yùn)行Java程序的過(guò)程中干花,會(huì)把它管理的內(nèi)存劃分為幾個(gè)不同的數(shù)據(jù)區(qū)域。

JDK1.6楞黄,1.7的JVM運(yùn)行內(nèi)存

線程私有的:程序計(jì)數(shù)器池凄,虛擬機(jī)棧,本地方法棧

線程共享的:堆鬼廓,方法區(qū)(永久代肿仑,持久代),直接內(nèi)存(非運(yùn)行時(shí)內(nèi)存的一部分)

運(yùn)行時(shí)內(nèi)存

堆(Heap)內(nèi)存 GC 堆(Garbage Collected Heap)。現(xiàn)在收集器基本都采用分代垃圾收集算法尤慰,分為新生代馏锡,老生代。用于存放對(duì)象實(shí)例伟端,幾乎所有的對(duì)象實(shí)例和數(shù)組都在這里分配內(nèi)存

  • 新生代 PSYoungGen

    • eden space
    • from space
    • to space
  • 老生代 PSOldGen

    • object space

方法區(qū) Method Area 杯道,也叫非堆Non-Heap。存儲(chǔ)已被虛擬機(jī)加載的類信息责蝠、常量党巾、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)

  • 永久代 PSPermGen

    • object space

霜医,線程私有的齿拂。生命周期隨著線程的創(chuàng)建而創(chuàng)建,隨著線程的死亡而死亡肴敛。 在 HotSpot 虛擬機(jī)中和 Java 虛擬機(jī)棧合二為一署海。

  • 程序計(jì)數(shù)器:字節(jié)碼解釋器通過(guò)這個(gè)計(jì)數(shù)器的值來(lái)選取下一條需要執(zhí)行的字節(jié)碼指令,分支医男、循環(huán)叹侄、跳轉(zhuǎn)、異常處理昨登、線程恢復(fù)等趾代。唯一一個(gè)不會(huì)出現(xiàn) OutOfMemoryError 的內(nèi)存區(qū)域

  • 虛擬機(jī)棧棧內(nèi)存 (Stack),其中棧就是現(xiàn)在說(shuō)的虛擬機(jī)棧。實(shí)際上丰辣,Java 虛擬機(jī)棧是由一個(gè)個(gè)棧幀組成撒强,而每個(gè)棧幀中都擁有:局部變量表、操作數(shù)棧笙什、動(dòng)態(tài)鏈接飘哨、方法出口信息。包括基本類型(boolean琐凭、byte芽隆、char、short统屈、int胚吁、float、long愁憔、double)腕扶、對(duì)象引用(reference 類型)。

  • 本地方法棧吨掌,虛擬機(jī)使用到的 Native 方法服務(wù)半抱。本地方法棧也會(huì)創(chuàng)建一個(gè)棧幀脓恕,用于存放該本地方法的局部變量表、操作數(shù)棧窿侈、動(dòng)態(tài)鏈接炼幔、出口信息。

JDK1.6的VM options配置

Java類:

public static void main(String[] args) {
     byte[] allocation1, allocation2,allocation3,allocation4,allocation5;
     allocation1 = new byte[32768*1024]; // 32768 = 32M
     allocation2 = new byte[1024*1024]; // 1024 = 1M
     allocation3 = new byte[1024*1024]; // 1024 = 1M
//   allocation4 = new byte[512*1024]; // OOM異常:Java heap space
//   allocation5 = new byte[1024*1024];
}

vm options配置

# 堆初始值50m,最大值50m史简,新生代內(nèi)存:15m, 指定永久代內(nèi)存大小:初始16m乃秀,最大64m
-Xms50m -Xmx50m -Xmn15m -XX:PermSize=16m -XX:MaxPermSize=64m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails

輸出信息:

-XX:InitialHeapSize=52428800 -XX:MaxHeapSize=52428800 -XX:MaxNewSize=15728640 -XX:NewSize=15728640 -XX:ParallelGCThreads=4 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
Heap
 PSYoungGen      total 13440K, used 3433K 
  eden space 11520K, 29% used 
  from space 1920K, 0% used 
  to   space 1920K, 0% used 
 PSOldGen        total 35840K, used 32768K 
  object space 35840K, 91% used 
 PSPermGen       total 21248K, used 3813K 
  object space 21248K, 17% used 

如果不指定 -Xmn 輸出默認(rèn)信息:

# 堆內(nèi)存設(shè)置50m,各個(gè)區(qū)域內(nèi)存占內(nèi)存比例
-XX:InitialHeapSize=52428800 -XX:MaxHeapSize=52428800 
Heap
 PSYoungGen      total 14912K, used 3330K  占比 29%
  eden space 12800K, 26% used   占比 25%
  from space 2112K, 0% used     占比 4%
  to   space 2112K, 0% used     占比 4%
 PSOldGen        total 34176K, used 32768K  占比 66.75%
  object space 34176K, 95% used 
 PSPermGen       total 21248K, used 3703K   需要指定大谐巳俊:默認(rèn)20.75m 
  object space 21248K, 17% used 

運(yùn)行時(shí)常量池分环形。

Class 文件中除了有類的版本策泣、字段衙傀、方法、接口等描述信息外萨咕,還有常量池信息(用于存放編譯期生成的各種字面量和符號(hào)引用)

既然運(yùn)行時(shí)常量池時(shí)方法區(qū)的一部分统抬,自然受到方法區(qū)內(nèi)存的限制,當(dāng)常量池?zé)o法再申請(qǐng)到內(nèi)存時(shí)會(huì)拋出 OutOfMemoryError 異常危队。

JDK1.7 及之后版本的 JVM 已經(jīng)將運(yùn)行時(shí)常量池從方法區(qū)中移了出來(lái)聪建,在 Java 堆(Heap)中開(kāi)辟了一塊區(qū)域存放運(yùn)行時(shí)常量池。

JDK1.8的JVM運(yùn)行內(nèi)存

JDK1.8移出了方法區(qū)茫陆,改成了元空間(MetaSpace)金麸。整個(gè)永久代有一個(gè) JVM 本身設(shè)置固定大小上線,無(wú)法進(jìn)行調(diào)整簿盅,而元空間使用的是直接內(nèi)存挥下,受本機(jī)可用內(nèi)存的限制,并且永遠(yuǎn)不會(huì)得到 java.lang.OutOfMemoryError桨醋。你可以使用 -XX:MaxMetaspaceSize 標(biāo)志設(shè)置最大元空間大小棚瘟,默認(rèn)值為 unlimited,這意味著它只受系統(tǒng)內(nèi)存的限制喜最。-XX:MetaspaceSize 調(diào)整標(biāo)志定義元空間的初始大小如果未指定此標(biāo)志偎蘸,則 Metaspace 將根據(jù)運(yùn)行時(shí)的應(yīng)用程序需求動(dòng)態(tài)地重新調(diào)整大小。默認(rèn)容量 4496K=4.39m 已提交4864K = 4.75m, 預(yù)留1056768K = 1032m

一般MetaspaceSize默認(rèn)5m瞬内,MaxMetaspaceSize默認(rèn)1024m

JDK1.8的VM options配置

jdk1.8移除了-XX:PermSize=16m -XX:MaxPermSize=64m配置

vm options配置:

# 指定永久代內(nèi)存大小
-Xms50m -Xmx50m  -XX:+PrintCommandLineFlags -XX:+PrintGCDetails

堆內(nèi)存分配說(shuō)明:

  • 堆內(nèi)存共計(jì)50M = 新生代14.5m +老生代 33.5m +預(yù)留空間2m
  • 新生代PSYoungGen:14848K = 14.5m 占比 29%
    • eden space 12800K = 12.5m 占比25%
    • from space 2048K = 2m 占比4%
    • to space 2048K = 2m 占比4%
  • 老生代ParOldGen:34304K = 33.5m 占比 67%

GC信息如下:

-XX:InitialHeapSize=52428800 -XX:MaxHeapSize=52428800 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
Heap
 PSYoungGen      total 14848K, used 4736K 
  eden space 12800K, 37% used 
  from space 2048K, 0% used 
  to   space 2048K, 0% used 
 ParOldGen       total 34304K, used 32768K
  object space 34304K, 95% used 
 Metaspace       used 3450K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 376K, capacity 388K, committed 512K, reserved 1048576K
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=16m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64m; support was removed in 8.0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迷雪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子虫蝶,更是在濱河造成了極大的恐慌振乏,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秉扑,死亡現(xiàn)場(chǎng)離奇詭異慧邮,居然都是意外死亡调限,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門误澳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)耻矮,“玉大人,你說(shuō)我怎么就攤上這事忆谓●勺埃” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵倡缠,是天一觀的道長(zhǎng)哨免。 經(jīng)常有香客問(wèn)我,道長(zhǎng)昙沦,這世上最難降的妖魔是什么琢唾? 我笑而不...
    開(kāi)封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮盾饮,結(jié)果婚禮上采桃,老公的妹妹穿的比我還像新娘。我一直安慰自己丘损,他們只是感情好普办,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著徘钥,像睡著了一般衔蹲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呈础,一...
    開(kāi)封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天舆驶,我揣著相機(jī)與錄音,去河邊找鬼猪落。 笑死贞远,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笨忌。 我是一名探鬼主播蓝仲,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼官疲!你這毒婦竟也來(lái)了袱结?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤途凫,失蹤者是張志新(化名)和其女友劉穎垢夹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體维费,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡果元,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年促王,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片而晒。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝇狼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倡怎,到底是詐尸還是另有隱情迅耘,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布监署,位于F島的核電站颤专,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钠乏。R本人自食惡果不足惜栖秕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缓熟。 院中可真熱鬧累魔,春花似錦摔笤、人聲如沸够滑。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)彰触。三九已至,卻和暖如春命辖,著一層夾襖步出監(jiān)牢的瞬間况毅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工尔艇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尔许,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓终娃,卻偏偏與公主長(zhǎng)得像味廊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棠耕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 第二部分 自動(dòng)內(nèi)存管理機(jī)制 第二章 java內(nèi)存異常與內(nèi)存溢出異常 運(yùn)行數(shù)據(jù)區(qū)域 程序計(jì)數(shù)器:當(dāng)前線程所執(zhí)行的字節(jié)...
    小明oh閱讀 1,164評(píng)論 0 2
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理余佛,因此不免有一些不準(zhǔn)確的地方,同時(shí)不同JDK版本的...
    高廣超閱讀 15,599評(píng)論 3 83
  • 內(nèi)存溢出和內(nèi)存泄漏的區(qū)別 內(nèi)存溢出:out of memory窍荧,是指程序在申請(qǐng)內(nèi)存時(shí)辉巡,沒(méi)有足夠的內(nèi)存空間供其使用,...
    Aimerwhy閱讀 741評(píng)論 0 1
  • 1991年4月,由James Gosling主導(dǎo)的團(tuán)隊(duì)創(chuàng)造了Oak語(yǔ)言,java的前身,1995年5月23號(hào),Oa...
    Java架構(gòu)閱讀 1,598評(píng)論 1 37
  • Java8張圖 11憔恳、字符串不變性 12、equals()方法净蚤、hashCode()方法的區(qū)別 13喇嘱、...
    Miley_MOJIE閱讀 3,702評(píng)論 0 11