1.JVM系列-java內(nèi)存模型

一.背景


? ? ? ? 了解JVM猜煮,可以幫助開發(fā)人員解決OOM拗胜、GC慢灵汪、性能優(yōu)化等問題檀训,同時(shí)對(duì)JVM設(shè)計(jì)思想的學(xué)習(xí)。

二.JVM虛擬機(jī)規(guī)范內(nèi)存模型


三.常用查看內(nèi)存使用

? ?1.查看進(jìn)程享言,以下的4種方式皆可峻凫。

? ? ? ? jps

? ? ? ? jcmd

? ? ? ? ps -ef| grep java

? ? ? ? top -s60| grep java

?jps -v :查看啟動(dòng)參數(shù)

? ? 2.jstack pid

? ? ? ? ? ? ? 當(dāng)前時(shí)刻的線程快照,分析線程當(dāng)前狀態(tài)和停頓原因览露。

? ? ? ? ? ?3.jmap?

? ? ? ? ? ? ??jmap -heap pid? ?顯示當(dāng)前堆整體使用情況荧琼。

? ? ? ? ? ? ??jmap -histo pid? ?顯示當(dāng)前對(duì)象占用數(shù)和大小

? ? ? ? ? ? ??jmap -dump:format=b,file=heapdump pid

? ? ? ? ? ? ? 1>.示例:jmap -heap pid,

? 2>.示例 jmap -histo pid

3>.示例?jmap -dump:format=b,file=filepath pid

4.jcmd

?1.7之后jcmd代替jmap等工具

? ? ? 使用 jcmd 30480 help? 查看功能

常用介紹

1>.jcmd pid VM.flags 查看啟動(dòng)參數(shù)

2>.jcmd?pid?VM.uptime 查看JVM啟動(dòng)時(shí)長

3>.jcmd?pid?Thread.print 查看線程日志差牛,同jstackpid

4>.jcmd?pid?GC.class_histogram 同jmap -histopid

5>.jcmd?pid?GC.heap_dump filepath 同jmap dump功能

6>.jcmd?pidPerfCounter.print查看性能參數(shù)

示例:jcmd pid VM.flags?

示例:jcmd?pid?GC.heap_dump filepath

? ?5.jinfo

? ? ??jinfo pid :顯示系統(tǒng)顯示和默認(rèn)的參數(shù)命锄。比jps -v僅顯示被顯式指定的。

6.jstat

? ? ?1>.jstat -class pid 顯示類加載情況

? ? ?2>.jstat -gc pid 顯示各區(qū)域內(nèi)存以及gc次數(shù)

? ? ?3>.jstat -gcutil pid 顯示統(tǒng)計(jì)gc信息

? ? ?示例1>.jstat -class pid 顯示類加載情況

顯示列名 具體描述?

Loaded 裝載的類的數(shù)量?

Bytes 裝載類所占用的字節(jié)數(shù)?

Unloaded 卸載類的數(shù)量?

Bytes 卸載類的字節(jié)數(shù)?

Time 裝載和卸載類所花費(fèi)的時(shí)間

示例2>.jstat -gc pid 顯示各區(qū)域內(nèi)存以及gc次數(shù)? ?單位kb 時(shí)間單位秒

S0C:第一個(gè)幸存區(qū)的大小

S1C:第二個(gè)幸存區(qū)的大小

S0U:第一個(gè)幸存區(qū)的使用大小

S1U:第二個(gè)幸存區(qū)的使用大小

EC:伊甸園區(qū)的大小

EU:伊甸園區(qū)的使用大小

OC:老年代大小

OU:老年代使用大小

MC:方法區(qū)大小

MU:方法區(qū)使用大小

CCSC:壓縮類空間大小

CCSU:壓縮類空間使用大小

YGC:年輕代垃圾回收次數(shù)

YGCT:年輕代垃圾回收消耗時(shí)間

FGC:老年代垃圾回收次數(shù)

FGCT:老年代垃圾回收消耗時(shí)間

GCT:垃圾回收消耗總時(shí)間

?示例3>.?jstat -gcutil pid 顯示統(tǒng)計(jì)gc信息

S0:幸存1區(qū)當(dāng)前使用比例

S1:幸存2區(qū)當(dāng)前使用比例

E:伊甸園區(qū)使用比例

O:老年代使用比例

M:元數(shù)據(jù)區(qū)使用比例

CCS:壓縮使用比例

YGC:年輕代垃圾回收次數(shù)

FGC:老年代垃圾回收次數(shù)

FGCT:老年代垃圾回收消耗時(shí)間

GCT:垃圾回收消耗總時(shí)間

7.jhat

? jhat filepath 分析dump文件

? 示例:?jhat filepath?

四.使用mat查看堆dump文件

? ? ?jhat缺點(diǎn)是對(duì)于大文件較慢偏化,圖形化界面不夠直觀脐恩。所以對(duì)于大文件一般都選擇mat分析。

? ? ?mat是eclipse上的一個(gè)插件侦讨,在idea上無法使用驶冒,故在eclipse上操作析孽。

? ? ?1>.安裝mat

? 打開應(yīng)用市場(chǎng)? ? ? ?

搜索框輸入mat,紅框內(nèi)容只怎,點(diǎn)擊install即可袜瞬。

2>.切換到mat視圖

3>.導(dǎo)入dump文件

4>.分析

概覽圖,可以看出有個(gè)問題身堡,main線程占用太多內(nèi)存邓尤。

下圖是堆中對(duì)象的快照,看一看出未回收對(duì)象的數(shù)量和內(nèi)存

進(jìn)去能看到具體的對(duì)象

這里能看到線程中持有的對(duì)象

進(jìn)去能 看到線程持有具體的對(duì)象

到這里如果是內(nèi)存泄露基本能定位泄露的對(duì)象贴谎,如果發(fā)生OOM則結(jié)合線程日志可以定位到拋錯(cuò)的代碼行就可以定位到原因汞扎,OOM相對(duì)比較簡單后面會(huì)單獨(dú)的章節(jié)說明。

五.堆外內(nèi)存使用情況

JVM工具不能直接看出堆外內(nèi)存的占用擅这,但是可以通過進(jìn)程占用進(jìn)程-JVM已使用計(jì)算出堆外內(nèi)存占用澈魄。

圖1,進(jìn)程占219M

JVM占0M

可以看出使用堆外內(nèi)存確實(shí)占用大約了200M仲翎。

通過這種方式可以簡單的判定堆外內(nèi)存的使用情況痹扇。后面會(huì)單獨(dú)的章節(jié)詳細(xì)說明。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溯香,一起剝皮案震驚了整個(gè)濱河市鲫构,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玫坛,老刑警劉巖结笨,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異湿镀,居然都是意外死亡炕吸,警方通過查閱死者的電腦和手機(jī)整胃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門旧噪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人隘梨,你說我怎么就攤上這事蚀腿∽烊浚” “怎么了扫外?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵莉钙,是天一觀的道長。 經(jīng)常有香客問我筛谚,道長磁玉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任驾讲,我火速辦了婚禮蚊伞,結(jié)果婚禮上席赂,老公的妹妹穿的比我還像新娘。我一直安慰自己时迫,他們只是感情好颅停,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掠拳,像睡著了一般癞揉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溺欧,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天喊熟,我揣著相機(jī)與錄音,去河邊找鬼姐刁。 笑死芥牌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的聂使。 我是一名探鬼主播壁拉,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柏靶!你這毒婦竟也來了扇商?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤宿礁,失蹤者是張志新(化名)和其女友劉穎案铺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梆靖,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡控汉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了返吻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姑子。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖测僵,靈堂內(nèi)的尸體忽然破棺而出街佑,到底是詐尸還是另有隱情,我是刑警寧澤捍靠,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布沐旨,位于F島的核電站,受9級(jí)特大地震影響榨婆,放射性物質(zhì)發(fā)生泄漏磁携。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一良风、第九天 我趴在偏房一處隱蔽的房頂上張望谊迄。 院中可真熱鬧闷供,春花似錦、人聲如沸统诺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粮呢。三九已至唾糯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鬼贱,已是汗流浹背移怯。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留这难,地道東北人舟误。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像姻乓,于是被迫代替她去往敵國和親嵌溢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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