码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA递归中的垃圾回收

时间:2017-10-26 23:16:39      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:java   递归   垃圾回收   

最近在处理数据库导数据的工具,就是迭代发版之前把正式线的工程拷贝到测试环境,执行升级,看看功能是否完善。

所以涉及到对jdbc分页读取数据,再存储到测试环境数据库。在分页处理的地方,使用了递归。

工具交付给测试同事之后,大部分工程都能拷贝成功,但是有一部分大数据量的工程还是失败了,最开始的关注点都在数据库的数据上,因为比较恶心的是,数据库存了比较多的二进制字段,超级大文本。失败的现象是数据导到大表时,都会挂掉,一直跟到挂掉的MySQL记录,发现数据量并没有想象中的那么大。后来在日志角落里发现了内存泄漏,好吧,跟数据库没关系,一行一行的查代码。终于看到了递归的代码!


Java中有垃圾回收机制,理论上一个方法执行完了之后,方法内部申请的资源都会被回收,但是递归确实不一样,在整个递归结束之后,都不会释放掉中间申请占用的资源。我的场景之中,递归中查询到的源数据集合list,很大,当递归到一定的程度,必然会挂掉。其实比较简单的做法就是在递归中,对于比较声明的比较大的对象,直接置null即可,垃圾回收机制会回收这些递归中声明的变量。


即栈中存储对象的引用以及基本数据类型,堆中存储对象,引用只想堆中的对象,将引用置null,那么堆中的对象没有被引用,那么堆中申请的资源就会被回收。

直接上代码:

技术分享

JAVA递归中的垃圾回收

标签:java   递归   垃圾回收   

原文地址:http://13172906.blog.51cto.com/13162906/1976389

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!