Java堆棧溢出的出現很讓人痛苦的事情很多時候都無法找到頭緒這裡作者通過使用jrockit調用程序才最終發現了問題的所在在很多情況下Java堆棧溢出很有可能是你的代碼中用到數組到你的索引超出范圍了
javalangOutOfMemoryError: Java heap space
在Java程序運行中可能會報如上的錯誤通常是在運行過程中內存占用了沒有別釋放造成的
以前可能沒法跟蹤可能是很痛苦的事情現在好了我們有一個調試軟件可以用了在生產環境下使用的jRockit軟件進行調試是Oracle公司出品的
前兩天試用了一下真的很不錯
前陣子有個程序跑個禮拜左右就會出現Java堆棧溢出始終找不到頭緒後來使用jrockit才找到問題的出處
jrockit是可以調試遠程程序也可以調試本地程序的
具體調試步驟
(一)
如果是調試本地程序的話啟動jrockit然後啟動本地需要調試的程序會在左側工具欄 本地目錄下創建一個連接為需要調試的程序在上面點擊右鍵就會啟動跟蹤
如何跟蹤呢我的辦法就是等在跟蹤開始後進行截圖然後等程序運行一段時間後查找堆增長比較大的並且一直沒有釋放的變量
(二)
然後在上面點擊右鍵顯示分配跟蹤
(三)
然後找到對應的方法然後就去找問題吧看看是不是那個地方有內存一直沒有釋放啊
然後說點我自己的小經驗也許是不對的但是我在我的應用裡面確實是有效的
在經常需要調用的地方將變量設成全局的甚至是靜態的我的操作是設成全局的了圖省事呢呵呵因為我的變量時全局都要調用的而且是頻繁調用的
用完的變量一定要記得讓它等於null否則執行gc()貌似是不給回收的
基本上jrockit跟蹤是很強的都能夠找到你的問題所在要仔細觀察改完程序後記得再重新跟蹤下直到沒有內存洩露為止
寫完手工
題外話寫多線程的時候建議使用線程池來操作
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26094.html