如果JVM里运行的程序, 它的内存堆和持久存储区域的都满了,这个时候程序还想创建对象实例的话,垃圾收集器就会启动,试图释放足够的内存来创建这个对象。这个时候如果垃圾收集器 没有能力释放出足够的内存,它就会抛出OutOfMemoryError内存溢出错误。
SUN JVM的内存管理方式:
SUN的JVM是类似人类家族,也就是在一个地方创建对象,在它长期占据空间之前给它多次死亡的机会,SUN JVM会划分为:
1. 年轻的一代(Young generation),包括EDEN和2个幸存者空间(出发地和目的地the From space and the To space)
2. 老一代(Old generation)
3. 永久的一代(Permanent generation)
Java虚拟机的运行时数据区一般分类如下(不一定是物理划分):
1. 堆:主要存放对象实例,线程共享
2. 栈:主要存储特定线程的方法调用状态,线程独占
3. 本地方法栈:存储本地方法的调用状态,线程独占
4. PC寄存器:学过操作系统课程的都知道,线程独占
5. 方法区:主要存储了类型信息,线程共享
因此,在抛出内存溢出错误的时候,一般都会提示内存泄露的种类,一般也都是按照区域进行划分:
1. 堆(heap)内存泄漏java.lang.OutOfMemoryError: Javaheap space:大家都比较熟悉 ,通过设置-Xms2048m -Xmx4096m可以解决
2. 栈(stack)内存泄漏:当前线程运行期间维护的中间变量等信息过多,例如常见的死循环引起stack over flow
3. 方法区(permanent heap)内存泄漏,即java.lang.OutOfMemoryError: PermGen space:发生的原因和类型装载、类型卸载有直接的关系,
通过设置-XX:MaxNewSize=256m -XX:MaxPermSize=256m可以解决。
一般情况下,当服务器内存过小,而提供了大量的访问服务时,可能会缓存过多的数据对象造成堆内存溢出,当web应用不断扩大,加载的lib库达到一定大小(4M)后,
就容易报PermGen OOM,也就是方法区溢出。
在Linux服务器中将参数写入环境变量:
export CATALINA_OPTS="-Xms2048m -Xmx4096m"
export JAVA_OPTS="-XX:MaxNewSize=256m -XX:MaxPermSize=256m"
Xmx 最大不要超过服务器物理内存的80%
相关推荐
### Tomcat内存溢出总结 在生产环境部署和运行基于Java的应用时,合理配置Tomcat服务器的内存参数至关重要。不当的内存配置不仅可能导致应用性能下降,严重时甚至会引起服务不可用的问题。本文将针对常见的几种内存...
Tomcat内存溢出是Java应用程序中常见的问题,尤其是在运行大型Web应用程序时。内存溢出会导致系统性能下降,甚至服务崩溃。以下是对Tomcat内存溢出的三种常见类型的详细解释及解决策略。 1. OutOfMemoryError: Java...
### Eclipse Memory Analyzer (MAT) 分析 Tomcat 内存溢出详解 #### 一、引言 在软件开发过程中,特别是在 Java 应用程序中,内存管理是非常关键的一环。当应用程序遭遇 `OutOfMemoryError` 异常时,通常意味着...
### Tomcat内存溢出问题详解 #### 一、引言 在Java Web应用服务器领域,Apache Tomcat是一款非常流行的开源Web容器,它以其轻量级、高性能和稳定性著称。然而,在实际部署与运行过程中,Tomcat服务器可能会遇到...
为了解决Tomcat内存溢出的问题,开发者需要对JVM内存分配有深入的理解,并且能够在不同操作系统环境中灵活设置JAVA_OPTS参数。通过合理分配初始堆内存(-Xms)和最大堆内存(-Xmx)的大小,并根据实际情况调整年轻代...
2. **永久代内存溢出**:永久代主要用于存放类元数据,当加载的类过多时,也可能导致内存不足。 #### 三、解决方案 ##### 3.1 增加JVM参数配置 为了有效地避免内存溢出问题,可以通过修改Tomcat服务器的启动脚本...
"TOMCAT内存大小调整" TOMCAT内存大小调整是指在使用Java程序从数据库中查询大量数据或应用服务器(如Tomcat、JBoss、WebLogic)加载jar包时,出现java.lang.OutOfMemoryError异常的解决方法。这种异常主要是由于...
总结来说,解决MyEclipse内存溢出问题需要理解Java内存模型和JVM参数设置,合理分配堆内存、新生代和永久代的大小。通过监控和调整这些参数,可以有效地避免内存溢出问题,提升应用的稳定性和性能。
【Tomcat内存溢出解决建议方案】 在Windows Server 2003 32位操作系统上运行的Tomcat Web应用程序经常遇到内存溢出问题,这种现象表现为溢出发生后重启Tomcat,但在大约一个月后再次出现。内存溢出的原因多种多样,...
描述中提到的“winserver tomcat注册成服务修改内存大小,解决tomcat内存溢出”,意味着在Windows Server操作系统上,Tomcat被配置为一个系统服务运行,这样可以确保服务器启动时自动启动Tomcat。然而,这种配置方式...
### Tomcat内存优化详解 #### 一、引言 在Java Web应用开发中,Apache Tomcat作为一款轻量级的应用服务器被广泛使用。然而,在实际部署和运行过程中,经常会遇到性能瓶颈,其中最常见的问题之一就是内存溢出异常,...
在Linux环境下运行Tomcat服务器时,经常会遇到与Java虚拟机(JVM)相关的内存溢出问题。这些问题通常表现为`java.lang.OutOfMemoryError`异常,具体又分为两类:`PermGen space`内存溢出和`Java heap space`内存溢出...
#### Tomcat内存配置详解 **1. Linux环境配置** - 在`catalina.sh`文件顶部添加以下配置: ```sh JAVA_OPTS="-server –Xms1024m –Xmx2048m -XX:PermSize=128M -XX:MaxPermSize=512m -XX:-UseGCOverheadLimit" ...
总结来说,解决由JSP页面引发的Tomcat内存溢出问题,通常需要从控制session的生命周期、调整JSP页面行为,以及优化应用配置等多方面进行。合理配置Web容器和应用程序,以及适时的监控和分析,是避免内存溢出的有效...