Java内存溢出(OutOfMemoryError)原因分析与优化解决方案

:end

Java内存溢出(OutOfMemoryError)原因分析与优化解决方案

其中最小内存为“-Xms128M”,最大内存为“-Xmx256M”。

二、 优化程序,释放垃圾。

主要有以下几点:要避免出现死循环,并且应当及时释放相关资源,比如内存以及数据库的各种连接等,不能让一次载入过多的数据。导致 java.lang.OutOfMemoryError 这一情况的根本原因在于程序不够健壮。所以,从根本上解决 Java 内存溢出问题的唯一办法就是对程序进行修改,及时地释放那些无用的对象,以释放内存空间。遇到该错误时需仔细检查程序。多遇到一次这种问题后,以后写程序会更加小心。

4. 对可能导致内存溢出的代码进行优化处理。

需要重点排查以下几点:

检查代码中是否有死循环或递归调用。

检查是否有大循环重复产生新对象实体。

在检查数据库查询时,需查看是否存在一次能获取全部数据的查询。通常情况下,若一次将十万条记录取到内存,就有可能导致内存溢出。此问题较为隐蔽,在上线之前,由于数据库中数据较少,不容易出现问题;而上线之后,数据库中的数据增多,一次查询就有可能引发内存溢出。所以,对于数据库查询,应尽量采用分页的方式进行查询。

检查 List、MAP 等集合对象在使用完后,是否存在未清除的情况。List、MAP 等集合对象会一直存有对对象的引用,从而导致这些对象无法被 GC 回收。

在 tomcat 中会出现 java.lang.OutOfMemoryError: PermGen space 异常,需要对其进行处理。

PermGen space 的全称为 Permanent Generation space 。它指的是内存的永久保存区域。这块内存主要被 JVM 用来存放 Class 和 Meta 信息。Class 在被 Loader 时就会被放置到 PermGen space 中。它与存放类实例(Instance)的 Heap 区域不同。GC(Garbage Collection)不会在主程序运行期对 PermGen space 进行清理。所以如果应用中有很多 CLASS,就很可能出现 PermGen space 错误。这种错误常见于 web 服务器对 JSP 进行 pre compile 的时候。如果你的 WEB APP 都使用了大量的第三方 jar,这些第三方 jar 的大小超过了 jvm 默认的 4M 大小,那么就会产生此错误信息。解决方法如下:手动设置 MaxPermSize 的大小,修改 TOMCAT_HOME/bin/catalina.sh 文件。

输出“正在使用 CATALINA_BASE:”以及 $CATALINA_BASE 的值

上面加入以下行:

JAVA_OPTS 为 -server ,同时还包括 -XX:PermSize=64M 以及 -XX:MaxPermSize=128m 。

建议把相同的第三方 jar 文件放置到 tomcat/shared/lib 目录下,如此便能实现减少 jar 文档重复占用内存的目标。

在 weblogic 中对 java.lang.OutOfMemoryError 异常进行处理。

ServletException 的根本原因是 java.lang.OutOfMemoryError ,解决办法是对 bea/weblogic/common 中的 CommEnv 中的参数进行调整。

:sun

如果 "%PRODUCTION_MODE%" 等于 "true",则跳转到 sun_prod_mode

set JAVA_VM=-client

设置 MEM_ARGS 为 -Xms256m ,设置 MEM_ARGS 为 -Xmx512m ,设置 MEM_ARGS 为 -XX:MaxPermSize=256m

设置 JAVA_OPTIONS 等于原本的 JAVA_OPTIONS 再加上 -Xverify:none

goto continue

:sun_prod_mode

set JAVA_VM=-server

set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m

goto continue

在 Resin 环境下处理 java.lang.OutOfMemoryError 异常。 对 java.lang.OutOfMemoryError 异常进行处理。 在 Resin 当中处理 java.lang.OutOfMemoryError 异常。 针对 Resin 来处理 java.lang.OutOfMemoryError 异常。 为 Resin 处理 java.lang.OutOfMemoryError 异常。

产生内存溢出的原因:

出现这个错误,通常是由于 JVM 物理内存比较小。Java 虚拟机默认的最大内存仅仅是 64 兆。在开发调试过程中,这或许没有问题。但在实际的应用环境里,这远远无法满足需求。除非你的应用特别小,并且访问量也很低。不然的话,你可能会看到程序运行了一段时间后,出现包 java.lang.OutOfMemoryError 的错误。因此我们需要提升resin可用的虚拟机内存的大小。

解决方法:

在 /usr/local/resin/bin/httpd.sh 中修改 args 选项,添加参数 -Xms(初始内存)以及 -Xmx(最大能够使用内存大小),这样就能够用来限制 JVM 的物理内存使用量。例如:

args="-Xms128m -Xmx256m"

设置之后,JVM 的初始物理内存为 128m,它最大能够使用的物理内存是 256m。

这两个值应该由系统管理员根据服务器的实际情况进行设置。

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

28阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

26阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

26阅读