内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。内存溢出主要是从容器和程序类两个方面进行排查,容器问题可以调整容器参数来解决。此类问题大多是因为程序引起的,要从根本上解决这类问题需要重点放在程序代码的编写上。
所以在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.lang.OutOfMemoryError: Java heap space 解决...Java.lang.OutOfMemoryError: Java heap space 是一种常见的 Java 错误,解决该问题需要从多方面入手,包括调整 JVM 的堆大小、调整 Tomcat 的配置、优化程序等。
在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)...
Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...
8. **定期重启**:在生产环境中,定期重启Tomcat服务也可以暂时缓解内存问题,因为这可以帮助清理内存中的累积垃圾。 通过以上策略,你应该能够有效地处理Tomcat的内存溢出问题。不过,解决这类问题通常需要结合...
### 编译时出现java.lang.OutOfMemoryError Java heap space异常 #### 一、问题概述 在进行Java项目编译的过程中,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这种异常。这类异常通常表明Java虚拟机...
Java中的`java.lang.OutOfMemoryError`是一种常见的运行时错误,通常表示应用程序在尝试分配内存时遇到了问题。根据提供的信息,这个错误主要涉及到两个方面:`PermGen space`和`Java heap`,并且与Tomcat服务器相关...
JAVA内存溢出问题总结 JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题...
`java.lang.OutOfMemoryError: Java heap space`错误是Java开发者经常会遇到的一个问题。通过理解错误产生的根本原因,并采取相应的措施来优化内存使用,可以有效地提高程序的性能和稳定性。希望本文提供的解决策略...
在Java应用程序运行过程中,"java.lang.OutOfMemoryError: PermGen space"错误是常见的一个问题,尤其是在使用Tomcat这样的Java应用服务器时。这个错误表明应用程序在 PermGen 区域(Permanent Generation)耗尽了...
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
在 Eclipse 中通过 Tomcat 运行 J2EE 项目时,可能会出现 java.lang.OutOfMemoryError: PermGen space 异常,这是由于 JVM 默认分配的运行空间过小,导致 J2EE 项目加载的类过多,造成内存溢出。 PermGen space 是...
然而,在处理大量数据时,Kettle可能会遇到内存管理问题,导致Java堆空间溢出错误。这种错误通常表现为"Java heap space",意味着Java虚拟机(JVM)分配的内存不足以执行任务。 **Java堆空间的原理** Java堆是Java...
在处理大文件时,POI会将整个工作簿加载到内存中,当文件过大时,就可能导致`java.lang.OutOfMemoryError`。 要解决这个问题,我们可以采取以下策略: 1. **流式处理(Streaming User Model API)**:POI提供了...
在Java开发过程中,我们经常会遇到`java.lang.OutOfMemoryError`(简称OOM)的问题。这个问题的发生主要是由于JVM内存不足或程序中存在内存泄漏所引起的。本文将深入探讨OOM产生的原因以及如何有效地解决这一问题。 ...
Java内存溢出问题,全称为Java OutOfMemoryError,是Java开发者经常遇到的运行时异常。内存溢出通常发生在程序运行过程中,系统无法为运行的应用程序分配足够的内存资源,导致程序无法正常执行。理解并解决Java内存...
本文将针对两种常见的Java内存溢出错误——`java.lang.OutOfMemoryError: PermGen space`和`java.lang.OutOfMemoryError: Java heap space`进行详细的分析和解决方案的探讨。 首先,我们来看`java.lang....
对于Java应用而言,了解如何有效识别并解决内存溢出问题至关重要。 #### 解决Java内存溢出的方法 ##### 1. **理解内存结构** 在深入探讨解决方案之前,首先需要了解Java虚拟机(JVM)的内存布局: - **堆内存**:...
Java中的`java.lang.OutOfMemoryError`是一种常见的运行时错误,通常表示应用程序在尝试分配新的内存对象时,Java虚拟机(JVM)无法找到足够的连续内存空间来完成操作。这个错误可能由多种原因引起,主要分为堆内存...
Java内存溢出(Out Of Memory, OOM)是开发者在编程过程中经常遇到的问题,尤其是在处理大量数据或长时间运行的应用程序时。本篇文章将详细解析三种常见的Java内存溢出类型:JVM PermGen space溢出、JVM heap space...