JAVA递归中的垃圾回收

简介:

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

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

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


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


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

直接上代码:

61c8da2b338a5ac5e28333d5692b3b0f.png-wh_




本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/13172906/1976389,如需转载请自行联系原作者

相关文章
|
2月前
|
JavaScript 前端开发 算法
Java Script 中的垃圾回收机制有哪些缺点
Java Script 中的垃圾回收机制有哪些缺点
18 0
|
2月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制
【2月更文挑战第13天】 本文旨在深入剖析Java中的核心机制之一——垃圾回收(Garbage Collection, GC)。与传统的摘要不同,我们不会概述全文内容,而是直接点明文章将探讨的重点问题:如何合理利用垃圾回收机制优化Java应用性能。通过分析不同垃圾回收器的工作原理与特点,本文将指导开发者识别和处理内存泄漏,选择合适的垃圾回收策略,以及评估垃圾回收行为对应用性能的实际影响。
|
3天前
|
Java
java中递归实例
java中递归实例
15 0
|
15天前
|
算法 Java Go
Go vs Java:内存管理与垃圾回收机制对比
对比了Go和Java的内存管理与垃圾回收机制。Java依赖JVM自动管理内存,使用堆栈内存并采用多种垃圾回收算法,如标记-清除和分代收集。Go则提供更多的手动控制,内存分配与释放由分配器和垃圾回收器协同完成,使用三色标记算法并发回收。示例展示了Java中对象自动创建和销毁,而Go中开发者需注意内存泄漏。选择语言应根据项目需求和技术栈来决定。
|
3天前
|
Java C语言
详解java方法与递归
详解java方法与递归
10 3
|
4天前
|
存储 算法 Java
了解Java内存管理与垃圾回收机制
了解Java内存管理与垃圾回收机制
7 0
|
6天前
|
缓存 监控 算法
Java的垃圾回收机制
Java的垃圾回收机制自动管理内存,释放无引用对象占用的空间,防止内存泄漏和溢出。常见的算法有标记-清除、标记-整理、复制和分代收集。过程包括标记和清除/整理阶段。垃圾回收器由根集、标记位、空闲列表和卡片表等组件构成,有Serial、Parallel等不同类型的收集器可供选择。调优涉及堆内存设置、选择合适收集器及减少对象创建。注意避免过多短生命周期对象,利用缓存和对象池,谨慎处理finalize方法。理解并优化垃圾回收对提升Java应用性能至关重要。
|
13天前
|
自然语言处理 Java 编译器
【Java探索之旅】方法重载 递归
【Java探索之旅】方法重载 递归
10 0
|
17天前
|
SQL Java 关系型数据库
java 递归返回树形组织结构(附带树形菜单的搜索)
java 递归返回树形组织结构(附带树形菜单的搜索)
14 0
|
18天前
|
Java
Java 与垃圾回收有关的方法
Java 与垃圾回收有关的方法