Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345424
  • 博文数量: 71
  • 博客积分: 2129
  • 博客等级: 大尉
  • 技术积分: 835
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-18 16:03
文章分类

全部博文(71)

文章存档

2014年(22)

2013年(18)

2012年(24)

2010年(7)

我的朋友

分类: Java

2012-03-15 13:53:30

     JAVA技巧之Tomcat下运行Java Web内存溢出规律总结,希望能朋友们有所帮助吧

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服务器中将参数写入环境变量:

  1. export CATALINA_OPTS="-Xms2048m -Xmx4096m" 
  2. export JAVA_OPTS="-XX:MaxNewSize=256m -XX:MaxPermSize=256m" 

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

焊接球阀相关信息请访问:焊接球阀陶瓷 陶瓷进料阀 流体减压阀


阅读(1191) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~