本篇內(nèi)容介紹了“JVM的秘密空間是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為永勝企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,永勝網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
軟件運(yùn)行或者程序開(kāi)發(fā)中,有時(shí)候會(huì)需要寫一些臨時(shí)文件,那寫這些臨時(shí)文件的目錄在哪呢?不同的軟件,不同的語(yǔ)言,以及不同的操作系統(tǒng)都有所區(qū)別。在 Java 語(yǔ)言的世界里,因?yàn)槭强缙脚_(tái)的語(yǔ)言,而且每個(gè)人的設(shè)置并不相同,所以這對(duì)應(yīng)到具體當(dāng)前系統(tǒng)的臨時(shí)文件在哪,可以通過(guò)在代碼里獲取環(huán)境變量。
System.getProperty("java.io.tmpdir") 來(lái)看。
這個(gè)目錄除了我們可以做為臨時(shí)目錄外,是不是我們不寫文件的時(shí)候就用不到了呢?
其實(shí)并不是。這個(gè)目錄相當(dāng)于 JVM 的「秘密花園」,虛擬機(jī)會(huì)在這里記錄許多的信息。
例如每一個(gè) java 的進(jìn)程,都會(huì)在該臨時(shí)目錄下的 `hsperfdata_$USER(你自己的用戶名)`目錄生成一個(gè)進(jìn)程ID對(duì)應(yīng)的文件。
可能有人遇到這種問(wèn)題,Java 程序可以正常執(zhí)行,但是通過(guò) jps 命令不能把進(jìn)程給列出來(lái)。這種一般都是和 tmpdir 有關(guān),直接查看是否有對(duì)應(yīng)的寫權(quán)限,磁盤是否已滿。
以后你無(wú)論是執(zhí)行jps 命令,還是其他監(jiān)控診斷類的應(yīng)用需要 attach 到JVM 的時(shí)候,如果需要提供Java 進(jìn)程列表,都會(huì)從這兒讀取。而且這個(gè)進(jìn)程文件并不是個(gè)空文件,里面有大量的內(nèi)容。
所以我們常用的 jstat 以及我們以前文章中提到的JConsole、JVisualVM、SA 等工具,都會(huì)從這個(gè)文件這里讀內(nèi)容,再進(jìn)行展示。
文件的內(nèi)容哪里來(lái)的呢?
這了支持對(duì) JVM 的監(jiān)控,虛擬機(jī)里特地開(kāi)辟了一塊內(nèi)存,用來(lái)存放這些性能統(tǒng)計(jì)相關(guān)的數(shù)據(jù),統(tǒng)稱為 PerfData,這也是前面目錄稱為 hsperfdata的原因。隨著 Java 進(jìn)程的不斷運(yùn)行,那些不斷變化的監(jiān)控值,虛擬機(jī)一般會(huì)通過(guò)共享內(nèi)存的方式將內(nèi)存與這個(gè)文件進(jìn)行映射。并在數(shù)據(jù)變化的時(shí)候刷新到文件。
比如我們可以通過(guò)命令來(lái)查看加載類的信息,以及像gc 的一些數(shù)據(jù)
jstat -class file:///<path>/hsperfdata/<pid> jstat -gc file:///<path>/hsperfdata/<pid>
還不過(guò)癮,可以試試這個(gè)命令,查看更多的監(jiān)控信息
jstat -J-Djstat.showUnsupported=true -snap pid
選項(xiàng)默認(rèn)是開(kāi)啟的,對(duì)性能的影響基本可以忽略,如果想要關(guān)閉,可以通過(guò)-XX:-UsePerData 來(lái)操作,
這個(gè)JVM參數(shù)官方說(shuō)明如下
-XX:+UsePerfData
Enables the perfdata feature. This option is enabled by default to allow JVM monitoring and performance testing. Disabling it suppresses the creation of the hsperfdata_userid directories. To disable the perfdata feature, specify -XX:-UsePerfData.
這個(gè)文件就是我們通過(guò)外部監(jiān)控工具 attach 到 JVM 的時(shí)候,讀到的那些內(nèi)容。
這個(gè)秘密空間,在 JVM 內(nèi)部是通過(guò) PerfMemory 的模塊來(lái)統(tǒng)一管理的,負(fù)責(zé)創(chuàng)建、分配和銷毀。
正常情況下JVM 退出時(shí)會(huì)把該文件同步刪除,但如果異常kill 的情況,那文件會(huì)保留下來(lái),一直留著。下次執(zhí)行哪怕一個(gè)簡(jiǎn)單的 jps 等命令時(shí),只要啟動(dòng)了 java 進(jìn)程,都會(huì)判斷下該目錄下文件對(duì)應(yīng)的進(jìn)程是否存在,沒(méi)有就會(huì)刪除了。
“JVM的秘密空間是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)頁(yè)名稱:JVM的秘密空間是什么
本文URL:http://vcdvsql.cn/article34/gjiose.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、域名注冊(cè)、網(wǎng)站收錄、建站公司、做網(wǎng)站、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)