Java web项目内存_tomcat启动java web项目时报内存溢出

本文详细介绍了Java虚拟机(JVM)的内存区域划分,包括新生代、老年代和持久代,并解释了内存溢出错误的情况,如Heap Space和 PermGen Space。针对这些问题,提出了调整JVM参数的解决方案,如-Xms、-Xmx、-XX:MaxNewSize和-XX:MaxPermSize。同时,讨论了内存泄漏的不同类型及其对程序运行的影响。
摘要由CSDN通过智能技术生成

如果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 space,也就是方法区溢出。

在Linux服务器中将参数写入环境变量:

export CATALINA_OPTS="-Xms1024m -Xmx2048m"

export JAVA_OPTS="-XX:MaxNewSize=256m -XX:MaxPermSize=256m"

Xmx 最大不要超过服务器物理内存的80%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值