Java堆栈溢出的出现很让人痛苦的事情很多时候都无法找到头绪这里作者通过使用jrockit调用程序才最终发现了问题的所在在很多情况下Java堆栈溢出很有可能是你的代码中用到数组到你的索引超出范围了
javalangOutOfMemoryError: Java heap space
在Java程序运行中可能会报如上的错误通常是在运行过程中内存占用了没有别释放造成的
以前可能没法跟蹤可能是很痛苦的事情现在好了我们有一个调试软件可以用了在生产环境下使用的jRockit软件进行调试是Oracle公司出品的
前两天试用了一下真的很不错
前阵子有个程序跑个礼拜左右就会出现Java堆栈溢出始终找不到头绪后来使用jrockit才找到问题的出处
jrockit是可以调试远程程序也可以调试本地程序的
具体调试步骤
(一)
如果是调试本地程序的话启动jrockit然后启动本地需要调试的程序会在左侧工具栏 本地目录下创建一个连接为需要调试的程序在上面点击右键就会启动跟蹤
如何跟蹤呢我的办法就是等在跟蹤开始后进行截图然后等程序运行一段时间后查找堆增长比较大的并且一直没有释放的变量
(二)
然后在上面点击右键显示分配跟蹤
(三)
然后找到对应的方法然后就去找问题吧看看是不是那个地方有内存一直没有释放啊
然后说点我自己的小经验也许是不对的但是我在我的应用里面确实是有效的
在经常需要调用的地方将变量设成全局的甚至是静态的我的操作是设成全局的了图省事呢呵呵因为我的变量时全局都要调用的而且是频繁调用的
用完的变量一定要记得让它等于null否则执行gc()貌似是不给回收的
基本上jrockit跟蹤是很强的都能够找到你的问题所在要仔细观察改完程序后记得再重新跟蹤下直到没有内存洩露为止
写完手工
题外话写多线程的时候建议使用线程池来操作