国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

實(shí)戰(zhàn)Java虛擬機(jī)之一“堆溢出處理”

Arno / 2275人閱讀

摘要:如下文字顯示了典型的堆內(nèi)存溢出一旦發(fā)生這類(lèi)問(wèn)題,系統(tǒng)就會(huì)被迫退出。有關(guān)等工具的使用,可以參閱實(shí)戰(zhàn)虛擬機(jī)故障診斷與性能優(yōu)化第章。除了在發(fā)生時(shí)可以導(dǎo)出堆信息外,虛擬機(jī)還允許在發(fā)生錯(cuò)誤時(shí)執(zhí)行一個(gè)腳本文件。

從今天開(kāi)始,我會(huì)發(fā)5個(gè)關(guān)于java虛擬機(jī)的小系列:
實(shí)戰(zhàn)Java虛擬機(jī)之一“堆溢出處理”
[實(shí)戰(zhàn)Java虛擬機(jī)之二“虛擬機(jī)的工作模式”][2]
[實(shí)戰(zhàn)Java虛擬機(jī)之三“G1的新生代GC”][3]
實(shí)戰(zhàn)Java虛擬機(jī)之四“禁用System.gc()”
實(shí)戰(zhàn)Java虛擬機(jī)之五“開(kāi)啟JIT編譯”

下面說(shuō)說(shuō)【實(shí)戰(zhàn)Java虛擬機(jī)之一“堆溢出處理”】

在Java程序的運(yùn)行過(guò)程中,如果堆空間不足,則有可能拋出內(nèi)存溢出錯(cuò)誤(Out Of Memory),簡(jiǎn)稱(chēng)為OOM。如下文字顯示了典型的堆內(nèi)存溢出:

Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at geym.zbase.ch3.heap.DumpOOM.main(DumpOOM.java:20)

一旦發(fā)生這類(lèi)問(wèn)題,系統(tǒng)就會(huì)被迫退出。如果發(fā)生在生產(chǎn)環(huán)境,可能會(huì)引起嚴(yán)重的業(yè)務(wù)中斷。為了能夠不斷改善系統(tǒng),避免或減少這類(lèi)錯(cuò)誤的發(fā)生,需要在發(fā)生錯(cuò)誤時(shí),獲得盡可能多的現(xiàn)場(chǎng)信息,以幫助研發(fā)人員排查現(xiàn)場(chǎng)問(wèn)題。Java虛擬機(jī)提供了參數(shù)-XX:+HeapDumpOnOutOfMemoryError,使用該參數(shù),可以在內(nèi)存溢出時(shí)導(dǎo)出整個(gè)堆信息。和它配合使用的還有-XX:HeapDumpPath,可以指定導(dǎo)出堆的存放路徑。
【示例3-4】以下代碼合計(jì)分配了25M內(nèi)存空間。

public class DumpOOM {
  public static void main(String[] args) {
    Vector v=new Vector();
   for(int i=0;i<25;i++)
     v.add(new byte[1*1024*1024]);
 }
}

使用如下參數(shù)執(zhí)行上述代碼:

-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump

顯然20M堆空間不足以容納25M內(nèi)存,系統(tǒng)比如發(fā)生內(nèi)存溢出,在發(fā)生錯(cuò)誤后,控制臺(tái)輸出如下:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to d:/a.dump …
Heap dump file created [23067302 bytes in 0.160 secs]
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at geym.zbase.ch3.heap.DumpOOM.main(DumpOOM.java:19)

可以看到,虛擬機(jī)將當(dāng)前的堆導(dǎo)出,并保存到D:/a.dump文件下。使用MAT等工具打開(kāi)該文件進(jìn)行分析,如圖所示,可以很容易地找到這些byte數(shù)組和保存它們的Vector對(duì)象實(shí)例。有關(guān)MAT等工具的使用,可以參閱《實(shí)戰(zhàn)Java虛擬機(jī)-jvm故障診斷與性能優(yōu)化》第7章

除了在發(fā)生OOM時(shí)可以導(dǎo)出堆信息外,虛擬機(jī)還允許在發(fā)生錯(cuò)誤時(shí)執(zhí)行一個(gè)腳本文件。該文件可以用于奔潰程序的自救、報(bào)警或者通知,也可以幫助開(kāi)發(fā)人員獲得更多的系統(tǒng)信息,如完整的線程轉(zhuǎn)存(即Thread Dump或者Core Dump)文件。

這里給出一個(gè)在發(fā)生OOM時(shí)導(dǎo)出線程轉(zhuǎn)存的例子。準(zhǔn)備printstack.bat腳本如下:

D:/tools/jdk1.7_40/bin/jstack -F %1 > D:/a.txt

以上腳本將會(huì)導(dǎo)出給定Java虛擬機(jī)進(jìn)程的線程信息,并保存在D:/a.txt文件中。
使用如下參數(shù)執(zhí)行上述代碼:

-Xmx20m -Xms5m  “-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p”  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump

在程序異常退出時(shí),系統(tǒng)D盤(pán)下會(huì)生成新文件a.txt,里面保存著線程轉(zhuǎn)存信息。本例中,文件路徑“D:/tools/jdk1.7_40”為筆者的JDK按照目錄,讀者可以替換成自己的JAVA_HOME目錄,進(jìn)行嘗試。

節(jié)選自

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/64314.html

相關(guān)文章

  • Java實(shí)戰(zhàn)Java虛擬機(jī)之三“G1的新生代GC”

    摘要:今天開(kāi)始實(shí)戰(zhàn)虛擬機(jī)之三的新生代。一旦區(qū)被占滿,新生代就會(huì)啟動(dòng)。新生代收集前后的堆數(shù)據(jù)如圖所示,其中表示區(qū),表示區(qū),表示老年代。當(dāng)然我們最為關(guān)心的依然是的停頓時(shí)間以及回收情況。節(jié)選自實(shí)戰(zhàn)虛擬機(jī)一書(shū)交流群 今天開(kāi)始實(shí)戰(zhàn)Java虛擬機(jī)之三:G1的新生代GC。 總計(jì)有5個(gè)系列實(shí)戰(zhàn)Java虛擬機(jī)之一堆溢出處理實(shí)戰(zhàn)Java虛擬機(jī)之二虛擬機(jī)的工作模式實(shí)戰(zhàn)Java虛擬機(jī)之三G1的新生代GC實(shí)戰(zhàn)Java...

    BearyChat 評(píng)論0 收藏0
  • 實(shí)戰(zhàn)Java虛擬機(jī)之二“虛擬機(jī)的工作模式”

    摘要:今天開(kāi)始實(shí)戰(zhàn)虛擬機(jī)之二虛擬機(jī)的工作模式。總計(jì)有個(gè)系列實(shí)戰(zhàn)虛擬機(jī)之一堆溢出處理實(shí)戰(zhàn)虛擬機(jī)之二虛擬機(jī)的工作模式實(shí)戰(zhàn)虛擬機(jī)之三的新生代實(shí)戰(zhàn)虛擬機(jī)之四禁用實(shí)戰(zhàn)虛擬機(jī)之五開(kāi)啟編譯目前的虛擬機(jī)支持和兩種運(yùn)行模式。 今天開(kāi)始實(shí)戰(zhàn)Java虛擬機(jī)之二:虛擬機(jī)的工作模式。 總計(jì)有5個(gè)系列實(shí)戰(zhàn)Java虛擬機(jī)之一堆溢出處理實(shí)戰(zhàn)Java虛擬機(jī)之二虛擬機(jī)的工作模式實(shí)戰(zhàn)Java虛擬機(jī)之三G1的新生代GC實(shí)戰(zhàn)Jav...

    focusj 評(píng)論0 收藏0
  • 學(xué)習(xí)JVM必看書(shū)籍

    學(xué)習(xí)JVM的相關(guān)資料 《深入理解Java虛擬機(jī)——JVM高級(jí)特性與最佳實(shí)踐(第2版)》 showImg(https://segmentfault.com/img/bVbsqF5?w=200&h=200); 基于最新JDK1.7,圍繞內(nèi)存管理、執(zhí)行子系統(tǒng)、程序編譯與優(yōu)化、高效并發(fā)等核心主題對(duì)JVM進(jìn)行全面而深入的分析,深刻揭示JVM的工作原理。以實(shí)踐為導(dǎo)向,通過(guò)大量與實(shí)際生產(chǎn)環(huán)境相結(jié)合的案例展示了解...

    shaonbean 評(píng)論0 收藏0
  • 【轉(zhuǎn)】成為Java頂尖程序員 ,看這10本書(shū)就夠了

    摘要:實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)這本書(shū)是目前點(diǎn)評(píng)推薦比較多的書(shū),其特色是案例小,好實(shí)踐代碼有場(chǎng)景,實(shí)用。想要學(xué)習(xí)多線程的朋友,這本書(shū)是我大力推薦的,我的個(gè)人博客里面二十多篇的多線程博文都是基于此書(shū),并且在這本書(shū)的基礎(chǔ)上進(jìn)行提煉和總結(jié)而寫(xiě)出來(lái)的。 學(xué)習(xí)的最好途徑就是看書(shū),這是我自己學(xué)習(xí)并且小有了一定的積累之后的第一體會(huì)。個(gè)人認(rèn)為看書(shū)有兩點(diǎn)好處:showImg(/img/bVr5S5);  1.能出版出...

    DTeam 評(píng)論0 收藏0
  • Java學(xué)習(xí)必備書(shū)籍推薦終極版!

    摘要:實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)推薦豆瓣評(píng)分書(shū)的質(zhì)量沒(méi)的說(shuō),推薦大家好好看一下。推薦,豆瓣評(píng)分,人評(píng)價(jià)本書(shū)介紹了在編程中條極具實(shí)用價(jià)值的經(jīng)驗(yàn)規(guī)則,這些經(jīng)驗(yàn)規(guī)則涵蓋了大多數(shù)開(kāi)發(fā)人員每天所面臨的問(wèn)題的解決方案。 很早就想把JavaGuide的書(shū)單更新一下了,昨晚加今天早上花了幾個(gè)時(shí)間對(duì)之前的書(shū)單進(jìn)行了分類(lèi)和補(bǔ)充完善。雖是終極版,但一定還有很多不錯(cuò)的 Java 書(shū)籍我沒(méi)有添加進(jìn)去,會(huì)繼續(xù)完善下去。希望這篇...

    Steve_Wang_ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<