如何使用命令看jvm當前內(nèi)存 jvm程序計數(shù)器與操作系統(tǒng)程序計數(shù)器的區(qū)別?
jvm程序計數(shù)器與操作系統(tǒng)程序計數(shù)器的區(qū)別?JVM程序計數(shù)器VSOS程序計數(shù)器一.可以介紹JVM程序計數(shù)器:程序計數(shù)器是一大塊相對大的內(nèi)存空間,它的作用可以可以表示是當前線程所負責執(zhí)行的字節(jié)碼的行號指
jvm程序計數(shù)器與操作系統(tǒng)程序計數(shù)器的區(qū)別?
JVM程序計數(shù)器VSOS程序計數(shù)器
一.可以介紹
JVM程序計數(shù)器:
程序計數(shù)器是一大塊相對大的內(nèi)存空間,它的作用可以可以表示是當前線程所負責執(zhí)行的字節(jié)碼的行號指示器。在虛擬機的概念模型里字節(jié)碼解釋什么器工作時那就是是從轉(zhuǎn)變這個計數(shù)器的值來選取下一條必須不能執(zhí)行的字節(jié)碼指令,分支、停止循環(huán)、跳轉(zhuǎn)、異常處理、線程重新恢復等基礎功能都必須依戀這個計數(shù)器來完成。--摘選自《深入理解Java虛擬機》
OS程序計數(shù)器:
替能保證程序(在操作系統(tǒng)中解釋為進程)也能發(fā)動地不能執(zhí)行繼續(xù),CPU需要更具某些手段來判斷下一條指令的地址。而程序計數(shù)器顯然能起這種作用,因為通常又稱為指令計數(shù)器。在程序又開始想執(zhí)行前,要將它的起始地址,即程序的一條指令所在的內(nèi)存單元地址送入PC,而程序計數(shù)器(PC)的內(nèi)容即是從內(nèi)存提純的第一條指令的地址。當想執(zhí)行指令時,CPU將手動可以修改PC的內(nèi)容,即每不能執(zhí)行一條指令PC增加一個量,這個量等于指令所含的字節(jié)數(shù),盡快使其盡量的總是會再次負責執(zhí)行的下一條指令的地址。導致大多數(shù)指令是按順序來不能執(zhí)行的,因此可以修改的過程大多僅僅最簡單對PC加1。當程序撤回時,轉(zhuǎn)移到指令不能執(zhí)行的到最后結(jié)果那就是要變化PC的值,此PC值是轉(zhuǎn)去的地址,得以實現(xiàn)全部轉(zhuǎn)移。有些機器中也稱PC為指令指針I(yè)P(Instruction Pointer)
二.特點
JVM程序計數(shù)器:
.t要是線程還在負責執(zhí)行的是Java方法,則這個計數(shù)器記錄的是還在先執(zhí)行的虛擬機字節(jié)碼指令地址
.t如果不是也在負責執(zhí)行的是flutter方法,則這個技術器值為空(Undefined)
.t此內(nèi)存區(qū)域是任何一個在Java虛擬機規(guī)范中沒有規(guī)定任何OutOfMemoryError情況的區(qū)域
.t在任何一個可以確定的時刻,一個處理器(是對多核處理器來說是一個內(nèi)核)只會先執(zhí)行一條線程中的指令。因此,就是為了線程可以切換后能重新恢復到對的的執(zhí)行位置,每條線程都必須有三個的的的程序計數(shù)器,各條線程之間的計數(shù)器互不會影響,其它存儲,我們稱這類內(nèi)存區(qū)域為“線程土地所有權”的內(nèi)存
OS程序計數(shù)器:
.tPC永遠打向下一條待執(zhí)行指令的內(nèi)存地址(永遠永遠絕對不會為Undefined),但是在程序就開始執(zhí)行前,將程序指令序列的起始地址,即程序的第一條指令原先的內(nèi)存單元地址送入PC,
.tCPU遵循PC的指示從內(nèi)存讀取數(shù)據(jù)第一條指令(取指)。
.t當執(zhí)行指令時,CPU自動地修改PC的內(nèi)容,即每負責執(zhí)行一條指令PC增強一個量,這個量等于零指令所含的字節(jié)數(shù)(指令字節(jié)數(shù)),使PC總是打向下一條也將取指的指令地址。
.t導致大多數(shù)指令也是按順序來不能執(zhí)行的,因此修改PC的過程正常情況只是因為很簡單對PC加“指令字節(jié)數(shù)”。
.t當程序轉(zhuǎn)移時,轉(zhuǎn)移指令不能執(zhí)行的最終結(jié)果是要變化PC的值,此PC值那就是轉(zhuǎn)去的目標地址。
.t處理器總是會通過PC對準,取指、譯碼、不能執(zhí)行,若要實現(xiàn)了程序轉(zhuǎn)移。
三.存儲位置
JVM程序技術器:
線程單獨的的,JVM內(nèi)存模型一塊獨立的存儲區(qū)域,像是是CPU高速緩存中(L1~L3)
OS程序計數(shù)器:
OS線程的PC寄存器中。
runtime是懶漢式方法嗎?
Runtime類是單例模式,懶漢式.
某些類實例()
runtime.availableProcessors()資源處理器個數(shù)
()jvm能資源到的大的堆內(nèi)存(單位字節(jié)),與-Xmx或是
()jvm當前巳經(jīng)占用的堆內(nèi)存(單位字節(jié))
()jvm當前閑下堆內(nèi)存(單位字節(jié))(jvm從操作系統(tǒng)可以申請到內(nèi)存后,會有一小部分內(nèi)存不可能被不使用,正處于多余的時間狀態(tài),假如委托-Xms參數(shù),這樣項目啟動時,閑下內(nèi)存可能會比較大)