- 9
- 0
- 约7.63千字
- 约 11页
- 2017-08-08 发布于河南
- 举报
如何解决Java内存泄漏
撰写人:王红波
部 门:上海开发部
日 期: 2008-5-5
修订历史记录
日期 文档版本号 说明 作者
填写说明:
产品新增时(注意不是文档新增时),该表开始填写,说明本次为新建,不需要填写后续详细修改说明。
产品开发过程中或以后产品升级过程中,每次修改都要在该表中登记主要内容,修改内容直接在文档中体现,并在本文档后面依次添加详细修改说明。
表格中每行应为一独立任务,例如产品首次建立时,先是编写,后是评审,评审后根据意见再调整等一系列工作,延续的时间可能比较长,仍然只需要填写表中一行。对于产品升级,无论是以开发项目形式还是以产品维护方式,都按该原则执行。
“时间”可以填写为起始和结束两日期,“文档版本号”填写修订后的文档版本号。
表中历史内容不应删除,应一直保留。
目 录
1 背景 2
2 Java内存回收机制 2
3 如何检查内存泄漏 3
3.1 程序的安装 3
3.2 如何配置OptimizeIt 3
3.3 如何利用OptimizeIt检查内存泄漏 5
4 常见内存泄漏实例 6
4.1 简单的例子 6
4.2 客户端内存泄漏 7
4.3 Jboss底层内存泄漏 8
5 总结 8
6 参考文献 9
背景
Java提供了垃圾回收机制,实现了对内存回收的自动管理,大家在开发Java程序的时候不用再像C++一样手工的去调用函数来释放内存,这很大程度上简化了程序开发,提高了编程效率,但这也是一个双刃剑,一些开发人员就认为Java没有内存泄漏问题,开发过程中不注意对无效对象的释放和管理,在某些情况下不仅会造成系统运行效率低下,也造成了内存泄漏。
在以往的项目中接连发现内存泄漏,有些相当严重,对系统长期稳定运行造成很大影响。Java内存泄漏的表现和诊测手段和C++不同,所涉及的方面比较多,一直也是应用系统开发的老大难问题,这里专门把Java内存泄漏方面的东西整理出来,希望在开发和测试过程对这个问题高度重视,争取在开发阶段就把问题避免了。
Java内存回收机制
在Java中所有对象都是在堆(Heap)中分配的,对象的创建通常都是采用new或者是反射的方式,但对象释放却没有直接的手段,所以对象的回收都是由Java虚拟机通过垃圾回收线程(GC)去完成的。
Java中对象回收的原则是这个-++-+++,准确的说是不再被系统运行线程中的各种对象引用,具体后面会详细介绍。垃圾回收线程怎么知道一个对象不再使用需要回收呢?这就需要垃圾回收线程监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等。
为了更好理解GC的工作原理,我们可以将对象考虑为有向图的顶点,将引用关系考虑为图的有向边,有向边从引用者指向被引对象。另外,每个线程对象可以作为一个图的起始顶点,例如大多程序从main进程开始执行,那么该图就是以main进程顶点开始的一棵根树。在这个有向图中,根顶点可达的对象都是有效对象,GC将不回收这些对象。如果某个对象 (连通子图)与这个根顶点不可达(注意,该图为有向图),那么我们认为这个(这些)对象不再被引用,可以被GC回收。
以下,我们举一个例子说明如何用有向图表示内存管理。对于程序的每一个时刻,我们都有一个有向图表示JVM的内存分配情况。以下右图,就是左边程序运行到第6行的示意图。
前面是一个最简单的例子,只是回收一个没有任何引用对象,但大部分情况下都比这个复杂得多,GC往往需要进行复杂的计算来确定一组对象做为整体没有外部引用,而全部可以释放。我们来看一个典型的Java程序的内存使用示意图:
上图中最外面代表整个内存堆,中间灰色的框代表系统运行所需有效对象空间,从垃圾回收的角度看这里有四类对象:
有效对象,在灰色框中的对象,这是系统运行需要的对象,不能被垃圾回收掉。
独立的无效对象,系统不需要再使用,而且没有任何外部引用,这类对象很快就会被垃圾回收掉。
一组无效的对象,从整体看系统已经不再需要这些对象,不过这些对象间存在相互依赖,这类对象的回收与垃圾回收线程算法相关,可能不会立刻回收掉,需要一段时间计算。
被有些对象引用到的无效对象,这就是我们要解决的内存泄漏的对象。
对于程序员来说,GC基本是透明的,只有几个函数可以访问GC,常见的是运行GC的函数System.gc(),但是根据Java语言规范定义, 该函数不保证JVM的垃圾收集器一定会执行。不同的JVM实现者可能使用不同的算法管理GC。通常GC的线程的优先级别较低。JVM调用GC的策略也有很多种,有的是内存使用到达一定程度时GC才开始工作,也有定时执行的,有的是平缓执行GC,有的是中断式执行GC。通常
您可能关注的文档
最近下载
- 浮法玻璃成形薄玻璃的温度控制方法介绍玻璃制造技术-(图文).pdf VIP
- 玻璃制造技术-薄玻璃退火存在的问题及注意事项(图文).pdf VIP
- 2025年水路运输年终工作总结.docx VIP
- 2025中国(辽宁)自由贸易试验区大连片区(大连保税区)面向国内外公开招聘笔试历年参考题库附带答案详解.pdf
- 邹仲之《组织学与胚胎学》4血液.ppt VIP
- 2025年水路运输工作总结和2026年工作计划.docx VIP
- ams抗菌药物管理课件.pptx VIP
- 传染病流行病学调查规范.docx VIP
- 砀山经济开发区市政道路工程(1-3标段)砀山经济开发区市政道路工程(1-3标段).doc VIP
- 2025年企业云会计在医药行业的应用与合规性报告.docx VIP
原创力文档

文档评论(0)