异常问题如下所示:

1.点击Eclipse->Window->Preferences,如下所示:

2.点击Server->Runtime Environments,选择Apache Tomcat v7.0,点击Edit按钮,如下图所示:

3.选择运行的JRE,点击Installed JRES,如下图所示:

4.选中jdk1.7.0_67,点击Edit,如下图所示:

5.找到Default VM Arguments,在输入框中输入:-Xms512M -Xmx1024M  -XX:MaxPermSize=512m,然后finish->OK->OK。

接下来说点理论的问题:内存溢出类型

1. java.lang.OutOfMemoryError: PermGen space

JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。

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, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

一个最佳的配置例子:(经过本人验证,自从用此配置之后,再未出现过tomcat死掉的情况)

set JAVA_OPTS=-Xms800m -Xmx800m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

2.java.lang.OutOfMemoryError: Java heap space

第一种情况是个补充,主要存在问题就是出现在这个情况中。其默认空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。如果内存剩余不到40%,JVM就会增大堆到Xmx设置的值,内存剩余超过70%,JVM就会减小堆到Xms设置的值。所以服务器的Xmx和Xms设置一般应该设置相同避免每次GC后都要调整虚拟机堆的大小。假设物理内存无限大,那么JVM内存的最大值跟操作系统有关,一般32位机是1.5g到3g之间,而64位的就不会有限制了。

注意:如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。

垃圾回收GC的角色

JVM调用GC的频度还是很高的,主要两种情况下进行垃圾回收:

当应用程序线程空闲;另一个是java内存堆不足时,会不断调用GC,若连续回收都解决不了内存堆不足的问题时,就会报out of memory错误。因为这个异常根据系统运行环境决定,所以无法预期它何时出现。

根据GC的机制,程序的运行会引起系统运行环境的变化,增加GC的触发机会。

为了避免这些问题,程序的设计和编写就应避免垃圾对象的内存占用和GC的开销。显示调用System.GC()只能建议JVM需要在内存中对垃圾对象进行回收,但不是必须马上回收,

一个是并不能解决内存资源耗空的局面,另外也会增加GC的消耗。

转载于:https://www.cnblogs.com/longshiyVip/p/4533353.html

解决eclipse报PermGen space内存溢出异常的问题相关推荐

  1. 解决eclipse报PermGen space异常的问题

    解决eclipse报PermGen space异常的问题 参考文章: (1)解决eclipse报PermGen space异常的问题 (2)https://www.cnblogs.com/zj0208 ...

  2. 怎么解决eclipse报PermGen space异常的问题

    怎么解决eclipse报PermGen space异常的问题 最近使用eclipse做开发,使用的服务器是tomcat,但在启动时报了Caused by: java.lang.OutOfMemoryE ...

  3. 内存溢出_关于PermGen Space内存溢出解决方案

    内存溢出分为Heap Space和PermGen Space两种异常.正巧的是我这次就碰到了PermGen space异常,为了解决这个异常花了我 半天的时间,所以今天写这个方案就是做一种笔记. 刚开 ...

  4. PermGen space内存溢出

    PermGen space内存溢出是tomcat发出的报错,解决方法如下: 1.双击tomcat:>>2.点击 Open launch configuration >>3.点击 ...

  5. JVM-03内存区域与内存溢出异常(下)【OutOfMemoryError案例】

    文章目录 思维导图 Java堆溢出 前置操作 测试类 结果 使用mat分析 内存泄露Memory Leak 内存溢出Memory Overflow 虚拟机栈和本地方法栈溢出 概述 StackOverf ...

  6. 《深入理解JVM.2nd》笔记(二):Java内存区域与内存溢出异常

    文章目录 概述 运行时数据区域 程序计数器 Java虚拟机栈 本地方法栈 Java堆 方法区 运行时常量池 直接内存 HotSpot虚拟机对象探秘 对象的创建 第一步 第二步 第三步 第四步 最后一脚 ...

  7. 《深入理解java虚拟机》第2章 Java内存区域与内存溢出异常

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. 2.1 概述 https://blog.csdn.net/q5706 ...

  8. java 二维数组内存溢出_程序员:学习心得,Java内存区域,内存溢出异常

    Java 内存区域 Heap 线程公有 存放实例对象 是GC主要管理区域,因此可以更细致的划分为:新生代.老年代 再细致一点划分:Eden区.From Survivor区.To Survivor区 内 ...

  9. JVM面试题整理-Java内存区域与内存溢出异常、垃圾收集器和内存分配策略

    参考: https://blog.csdn.net/zd836614437/article/details/64126826 https://blog.csdn.net/u011225629/arti ...

最新文章

  1. 颠覆认知——Redis会遇到的15个「坑」,你踩过几个?
  2. python九九乘法口诀表-python 99乘法口诀表
  3. 不同项目配置不同的 Git 账号
  4. mysql left day 7_day7-mysql函数
  5. python3字符串的常见操作
  6. P1020 导弹拦截(LIS)
  7. poj2480(利用欧拉函数的积性求解)
  8. JAXB和Log4j XML配置文件
  9. c# 对COM+对象反射调用时地址参数处理 c# 对COM+对象反射调用时地址参数处理
  10. 通达oa 不允许从该ip登陆_通达OA-命令执行漏洞复现
  11. Nat Biotechnol | 大神李恒团队开发不依赖于亲本的单倍型基因组组装工具hifiasm
  12. Python《wallpaper abyss壁纸》
  13. 包装又缩水!iPhone 13包装盒塑料膜变纸质拉条 网友:要将环保进行到底?
  14. mysql 开源订阅模式_Canal(增量数据订阅与消费 )快速配置
  15. [Ext JS 4] Grid 实战之分页功能
  16. 我国计算机网络发展水平,计算机网络发展
  17. 6.4-全栈Java笔记:异常处理办法(下)
  18. 数据分析思维(极客时间)
  19. extjs6 desktop 桌面多主题切换
  20. 开源音乐播放器_测试4个开源音乐播放器等

热门文章

  1. ubuntu 网络配置
  2. hadoop jar
  3. oracle使用连接池,使用Oracle的数据连接池
  4. var和function谁先优先执行_浅谈JavaScript 的执行顺序
  5. centos sftp客户端 c 源码_Redis第3课:如何使用 Redis客户端
  6. python100个内置函数详解_Python 63个内置函数详解
  7. mysql having的用法
  8. mysql 最基础的日常操作
  9. rsync+inotify实现实时同步案例详解
  10. ORA-00257:archiver error问题处理方法