内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。内存溢出主要是从容器和程序类两个方面进行排查,容器问题可以调整容器参数来解决。此类问题大多是因为程序引起的,要从根本上解决这类问题需要重点放在程序代码的编写上。
所以在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块中进行注销,保证在异常情况下也会注销,否则一直都会驻在内存。
分享到:
相关推荐
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
java.lang.OutOfMemoryError: PermGen space及其解决方法,解决项目太大tomcat内存溢出
java.lang.OutOfMemoryError,产生该错误的原因大都出于以下原因: JVM内存过小、程序不严密,产生了过多的垃圾.
Java内存溢出解决办法 加大Tomcat使用Jvm内存(转载) 注重版权 Caused by: java lang OutOfMemoryError: Java heap space 错误原因及解决方法
关于Java中内存溢出的解决办法 关于Java中内存溢出的解决办法
poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...
33.java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。 34.java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该...
java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: <jvm>-Xms3062m ...
解决Java_heap_space问题
java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。 java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 ...
TOMCAT出错:java.lang.OutOfMemoryError: Java heap space
主要介绍了Java 堆内存溢出原因分析,任何使用过基于 Java 的企业级后端应用的软件开发者都会遇到过这种报错,java.lang.OutOfMemoryError:Java heap space。,需要的朋友可以参考下
java.lang.OutOfMemoryError: PermGen space,OutOfMemoryError是内存溢出1、weblogic域的bin目录
在较大型的应用项目中,默认的内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误“java.lang.OutOfMemoryError: Java heap space”,从而导致客户端显示500错误。
1. java.lang.OutOfMemoryError: Java heap space 即JVM Heap溢出 解释说明:JVM在启动的时候会自动设置JVM Heap的值,JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。其初始空间默认是物理...
昨天遇到一个线上系统报 java.lang.OutOfMemoryError: PermGen space 错误,需要定位一下问题。很久之前到时弄过这个,现在还真有点不记得了,但这个真的是一个非常有意思的问题,值得好好研究一下。 首先第一...
关于内存溢出报错的处理及解决方案: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemory 堆内存、非堆内存都描述
解压缩开源软件junrar中存在bug,使用中会出现java.lang.OutOfMemoryError的错误,本资源包含了解决方法和修改后的junrar代码。
jvm内存溢出解决方法,详细内容看下面解释