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

資訊專欄INFORMATION COLUMN

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

Arno / 2267人閱讀

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

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

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

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

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

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

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)

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

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

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

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

以上腳本將會導出給定Java虛擬機進程的線程信息,并保存在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

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

節(jié)選自

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

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

相關(guān)文章

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

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

    BearyChat 評論0 收藏0
  • 實戰(zhàn)Java虛擬之二“虛擬的工作模式”

    摘要:今天開始實戰(zhàn)虛擬機之二虛擬機的工作模式??傆嬘袀€系列實戰(zhàn)虛擬機之一堆溢出處理實戰(zhàn)虛擬機之二虛擬機的工作模式實戰(zhàn)虛擬機之三的新生代實戰(zhàn)虛擬機之四禁用實戰(zhàn)虛擬機之五開啟編譯目前的虛擬機支持和兩種運行模式。 今天開始實戰(zhàn)Java虛擬機之二:虛擬機的工作模式。 總計有5個系列實戰(zhàn)Java虛擬機之一堆溢出處理實戰(zhàn)Java虛擬機之二虛擬機的工作模式實戰(zhàn)Java虛擬機之三G1的新生代GC實戰(zhàn)Jav...

    focusj 評論0 收藏0
  • 學習JVM必看書籍

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

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

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

    DTeam 評論0 收藏0
  • Java學習必備書籍推薦終極版!

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

    Steve_Wang_ 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<