内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。内存溢出主要是从容器和程序类两个方面进行排查,容器问题可以调整容器参数来解决。此类问题大多是因为程序引起的,要从根本上解决这类问题需要重点放在程序代码的编写上。
所以在Java中一般报内存溢出的除去容器参数原因有以下几种:
1、查询数据库的时候递归循环了,应尽量使用精简的关联SQL查询。内存中加载的数据量过于庞大,如一次从数据库取出过多数据而没有采用分页读取。
2、异常时没有加finally{}来释放某些资源,直接使用JDBC是很普遍的事情。或者数据库链接没有采用统一缓冲池的模式。
3、算法上的问题,不应该把大的数据,比如文件和Blob/Clob之类的东西读入到内存进行处理,而应该用Stream的方式进行。
4、 把某个对象放到了一个Set/List/Map 里面,用完了没有尽快释放。
5、 尽量少用静态变量,因为静态变量是全局的。
6、 把某些集合放到了 Session/Application 里面了,这样,如果Session不过期,他们占用内存就不会释放,即使其他地方为null也没用,既是说应用中存在大量的没有释放的Session或application。
7、程序里不可避免大量使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域;String str = "aaa"; String str2 = "bbb"; String str3 = str + str2;//假如执行此次之后str ,str2以后再不被调用,那它就会被放在内存中等待Java的GC去回收,程序内过多的出现这样的情况就会报上面的那个错误,建议在使用字符串时能使用StringBuffer而不要使用String,这样可以省不少开销;
8、 不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃。对集合类使用添加后,需要移除元素的时需要使用提供的对应remove方法例如集合中的HashMap时候删除元素一定要使用提供的remove()方法。当然若作为局部变量使用,如在方法内使用,没有问题,方法作用域结束可以回收,但是若是全局的比如static变量时,当map中无用的某个元素obj被其他引用指向的时候,可能不一定能被回收,导致内存泄露。
9、监听器类型的资源注册后没有注销,而且要保证在finally块中进行注销,保证在异常情况下也会注销,否则一直都会驻在内存。
分享到:
相关推荐
Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...
为了解决这一问题,Java提供了多种内存分析工具,其中CoreAnalyzer是一款专业的Java内存溢出分析工具。下面将详细介绍CoreAnalyzer的功能、使用方法以及如何通过它来分析和解决内存问题。 CoreAnalyzer主要功能: 1...
总之,Java内存溢出是复杂的问题,需要结合程序设计、JVM参数配置、垃圾收集机制和内存分析工具等多个方面进行综合分析和处理。理解这些概念并熟练运用,能有效防止和解决Java应用程序中的内存问题。
本文将深入探讨如何检测和分析Java内存泄露与溢出,并介绍一种常用的工具——Memory Analyzer(MAT)。 首先,理解内存泄露的概念至关重要。在Java中,内存泄露通常发生在对象不再被程序使用但仍然保持在内存中,...
而压缩包中的“内存溢出分析工具”可能包含了其他辅助分析内存问题的资源或文档,如使用教程、示例文件等。 总之,HeapAnalyzer456.jar是Java开发中不可或缺的内存诊断工具,通过它可以深入剖析内存溢出的原因,...
Java内存溢出问题,全称为Java OutOfMemoryError,是Java开发者经常遇到的运行时异常。内存溢出通常发生在程序运行过程中,系统无法为运行的应用程序分配足够的内存资源,导致程序无法正常执行。理解并解决Java内存...
在处理Java内存溢出问题时,除了使用上述工具外,还需要理解以下几个关键概念: 1. 堆内存:Java对象主要存储在堆内存中,过大或过多的对象可能导致堆溢出。 2. 非堆内存:包括JVM自身使用的内存(如方法区、元空间...
Java内存溢出问题通常指的是程序在试图分配内存时,无法找到足够的连续内存空间而抛出的异常。在Java中,内存分为几个区域:堆(Heap)、栈(Stack)、方法区(Method Area,Java 8后被元空间取代)以及程序计数器和...
Java内存溢出问题通常指的是Java应用程序在运行过程中由于内存分配不当或使用过度导致JVM无法分配更多的内存,从而抛出`java.lang.OutOfMemoryError`异常。本文将深入探讨Java内存溢出的不同类型及其解决方案。 1. ...
内存溢出配置是IT行业中,尤其是在Java应用开发与运维领域中的一个重要话题,它涉及到系统资源管理、性能调优以及故障排查等多个方面。标题与描述中重复提到“内存溢出配置”,这表明了对这一主题的关注与重视。接...
通过分析Javacore,我们可以定位内存溢出的原因,例如是否有无用对象未能正确垃圾回收,是否存在内存泄漏的类或者静态变量等。 JCA(Java Core Analysis)456是一款专门用于解析和分析Javacore文件的工具,它能帮助...
Java内存溢出(Out Of Memory, OOM)是开发者在编程过程中经常遇到的问题,尤其是在处理大量数据或长时间运行的应用程序时。本篇文章将详细解析三种常见的Java内存溢出类型:JVM PermGen space溢出、JVM heap space...
在软件开发领域,尤其是涉及到数据库应用的场景下,内存泄漏(Memory Leak)和内存溢出(Out of Memory,简称OOM)是两个常见的问题,它们直接影响到程序的性能、稳定性和可扩展性。以下是对这两个概念及其相关知识...
Java内存溢出问题,是Java开发中常见的性能问题,它发生在程序运行时,由于系统无法分配足够的内存资源来满足程序的运行需求,导致程序异常终止。深入理解Java内存溢出,有助于我们优化程序,提高系统稳定性。下面...
"JAVA内存泄漏分析工具"正是一款用于解决此类问题的专业工具,它能帮助开发者定位并修复内存相关的问题,如内存泄漏和内存溢出。 内存泄漏是程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能看似...
在探讨如何解决JAVA内存溢出问题时,我们首先需要理解几个关键的概念,...通过上述详细的分析和解释,相信读者已经对如何解决JAVA内存溢出问题有了更全面的理解和掌握,能够更加自信地应对和解决实际开发中的相关挑战。
标题中的“was内存溢出 javacore分析工具jca 401”指的是在WebSphere应用服务器(WAS)环境中,出现内存溢出问题时,使用名为JCA(Java Core Analysis)401的工具进行分析的情况。内存溢出是程序运行过程中,因分配...
在Java开发中,当面临大批量数据导出到Excel文件时,可能会遇到内存溢出的问题。这是因为Excel文件格式本身的设计,以及Java默认处理大数据的方式,可能导致内存占用过高,尤其是在一次性加载大量数据到内存中进行...
#### 解决Java内存溢出的方法 ##### 1. **理解内存结构** 在深入探讨解决方案之前,首先需要了解Java虚拟机(JVM)的内存布局: - **堆内存**:存放对象实例和数组。 - **栈内存**:线程私有的,用于存储局部变量...