`
zprill
  • 浏览: 35589 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA内存泄漏问题及解决办法

阅读更多

http://annesun.blogbus.com/logs/33694166.html

Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或 JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。

在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连; 其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。

在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC,这些内存将永远收不回来。在Java中,这些不可达的对象都由GC负责回收,因此不需要考虑这部分的内存泄露。

注意事项:

1.最基本的建议是尽早释放无用对象的引用。如:

A a = new A(); //应用a对象

a = null; //当使用对象a之后主动将其设置为空

….

注:如果a 是方法的返回值,不要做这样的处理,否则你从该方法中得到的返回值永远为空,而且这种错误不易被发现、排除

2.尽量少用finalize函数。它会加大GC的工作量。

3.如果需要使用经常用到的图片,可以使用soft应用类型。它尽可能把图片保存在内存中

4.注意集合数据类型,包括数组、树、图、链表等数据结构,这些数据结构对GC来说,回收更为复杂。

5.尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费

6.尽量避免强制系统做垃圾内存的回收,增长系统做垃圾回收的最终时间

7.尽量避免显式申请数组空间

8.尽量做远程方法调用类应用开发时使用瞬间值变量,除非远程调用端需要获取该瞬间值变量的值。

9.尽量在合适的场景下使用对象池技术以提高系统性能。

分享到:
评论

相关推荐

    java内存管理问题及解决办法

    主要描述java的内存管理机制、释放条件,及内存泄漏的几种可能,四种引用内存的方式各自的优缺点。对很多人来说java的内存管理不再只是个黑盒子

    java内存泄露、溢出检查方法和工具.pdf

    解决内存泄露问题的方法有两种:第一种是安排有经验的编程人员对代码进行走查和分析,找出内存泄漏发生的位置;第二种就是利用一些内存检查分析工具来分析,找出内存泄露的具体位置。 Java虚拟机(JVM)的参数设置...

    java 内存泄露分析流程

    java 内存泄露分析方法、在工作中经常会碰到各种原因导致的内存泄露问题,本方法或许可以帮你快速定位内存泄露的原因从而解决问题

    JAVA内存溢出问题总结

    JAVA内存溢出问题总结 JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题...

    防范JAVA内存泄漏解决方案

    Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用自已的亲身经历与各位...

    java内存泄露、溢出检查方法和工具

    本作者项目原创经历,内容关于java的一个web项目内存溢出的分析和解决,其中详细介绍了诊断的方法和一些工具的使用,重点写了利用Eclipse Memory Analyzer 分析工具来分析jvm的堆快照。很有实用价值。

    Java中典型的内存泄露问题和解决方法

    主要介绍了Java中典型的内存泄露问题和解决方法,典型的内存泄露例子是一个没有实现hasCode和equals方法的Key类在HashMap中保存的情况,可以通过实现Key类的equals和hasCode方法解决这种内存泄漏问题,需要的朋友可以...

    Java内存泄漏问题处理方法经验总结

    今天小编就为大家分享一篇关于Java内存泄漏问题处理方法经验总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    JAVA内存溢出

    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

    Java内存泄漏问题相关总结

    本文档通过简单的一些示例,分析了容易引起内存泄露的几大原因,并提出了解决的办法!

    java常见的几种内存溢出和解决方案.docx

    Java 中的内存溢出和解决方案 Java 中的内存溢出是一种常见的错误,可能会导致程序崩溃或hang死。了解 Java 中的内存溢出原因和解决方案是非常重要的。本文将介绍 Java 中的几种常见的内存溢出和解决方案。 1.JVM...

    理解Java中的内存泄露及解决方法示例

    主要介绍了理解Java中的内存泄露及解决方法示例,本文讲解了Java内存管理机制、Java内存泄露、一般情况下内存泄漏的避免、复杂数据结构中的内存泄露问题等内容,需要的朋友可以参考下

    java内存泄露资料

    资料为收集的一些关于垃圾回收及内存泄露方面的一些解决办法

    java OOM内存泄漏原因及解决方法

    主要介绍了java OOM内存泄漏原因及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java.lang.OutOfMemoryError: Java heap space 解决方法

    "Java.lang.OutOfMemoryError: Java heap space 解决方法" Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题...

    内存泄漏处理.doc

    曾经使用JAVA开发大型系统的网友恐怕都有过这种体会:系统运行一段时间后就抛出out of memory 异常,然后是...通过这种方法解决内存泄漏问题往往需要耗费大量的人力,而且并不能保证能够找到所有导致内存泄漏的代码。

    使用JNA替代JNI调用DLL,并解决内存溢出问题

    问题描述: 在开发项目过程中,需要处理算法分析出来二进制流数据,并对数据解析处理转发。我们上层应用平台是使用java开发的...那现在上层应用面临的问题:访问java外部功能接口实现方式(即调用dll)怎么选择及实现?

    Tomcat内存溢出的三种情况及解决办法分析

    Tomcat内存溢出的三种情况及解决办法分析 Tomcat内存溢出是指Tomcat服务器在运行过程中无法分配足够的内存空间,从而导致服务器崩溃或停止响应。这种情况常见于生产环境中Tomcat内存设置不良,或者应用程序本身存在...

    一种预防XML文件过大引起JAVA内存泄露的方案.pdf

    java内存泄露是对应用系统的稳定性有很大的影响,文件过大使程序运行要用到的内存大于虚拟机能提供的最大...文中提出了通过对XML文件拆分与拼装来解决由于XML文件过大而导致的内存泄露问题的方法.测试结果表明可以有...

Global site tag (gtag.js) - Google Analytics