本篇内容主要讲解“Java堆栈溢出的机制和原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java堆栈溢出的机制和原理是什么”吧!
Java堆栈溢出的出现,很让人痛苦的事情,很多时候都无法找到头绪。这里作者通过使用jrockit调用程序才最终发现了问题的所在。在很多情况下,Java堆栈溢出,很有可能是你的代码中用到数组,到你的索引超出范围了。
java.lang.OutOfMemoryError: Java heap space
在Java程序运行中可能会报如上的错误,通常是在运行过程中内存占用了没有别释放造成的。
以前可能没法跟踪可能是很痛苦的事情,现在好了,我们有一个调试软件可以用了,在生产环境下使用的jRockit软件进行调试,是Oracle公司出品的。
前两天试用了一下真的很不错。
前阵子有个程序跑2个礼拜左右就会出现Java堆栈溢出,始终找不到头绪,后来使用jrockit才找到问题的出处。
jrockit是可以调试远程程序也可以调试本地程序的。
具体调试步骤
(一)
如果是调试本地程序的话,启动jrockit,然后启动本地需要调试的程序,会在左侧工具栏 本地目录下创建一个连接为需要调试的程序,在上面点击右键,就会启动跟踪。
如何跟踪呢,我的办法就是等,在跟踪开始后,进行截图,然后等程序运行一段时间后查找堆增长比较大的并且一直没有释放的变量。
(二)
然后在上面点击右键,显示分配跟踪。
(三)
然后找到对应的方法,然后就去找问题吧,看看是不是那个地方有内存一直没有释放啊。
然后说点我自己的小经验,也许是不对的,但是我在我的应用里面确实是有效的。
在经常需要调用的地方将变量设成全局的甚至是静态的,我的操作是设成全局的了。图省事呢。呵呵,因为我的变量时全局都要调用的而且是频繁调用的。
用完的变量一定要记得让它等于null,否则执行gc()貌似是不给回收的。
基本上jrockit跟踪是很强的,都能够找到你的问题所在,要仔细观察,改完程序后记得再重新跟踪下直到没有内存泄露为止。
到此,相信大家对“Java堆栈溢出的机制和原理是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。