你知道如何解决Java内存溢出问题吗,这里和大家分享一下,JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。
Java内存溢出的详细解决方案
一、Java内存溢出类型
1、java.lang.OutOfMemoryError:PermGenspace
JVM管理两种类型的Java内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。如果webapp用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成Java内存溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。
PermGenspace的全称是PermanentGenerationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGenspace错误,这种错误常见在web服务器对JSP进行precompile的时候。如果你的WEBAPP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
一个最佳的配置例子:(经过本人验证,自从用此配置之后,再未出现过tomcat死掉的情况)
setJAVA_OPTS=-Xms800m
-Xmx800m-XX:PermSize=128M
-XX:MaxNewSize=256m
-XX:MaxPermSize=256m
或者修改bin/catalina.sh文件,在第一行输入以下
JAVA_OPTS="$JAVA_OPTS -server -Xms512m -Xmx2048m -XX:PermSize=128m -XX:MaxNewSize=256m -XX:MaxPermSize=256m"
2、java.lang.OutOfMemoryError:Javaheapspace
再来看一下Java内存溢出的第二种情况,第一种情况是个补充,主要存在问题就是出现在这个情况中。其默认空间(即-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,若连续回收都解决不了内存堆不足的问题时,就会报outofmemory错误。因为这个异常根据系统运行环境决定,所以无法预期它何时出现。根据GC的机制,程序的运行会引起系统运行环境的变化,增加GC的触发机会。
为了避免这些问题,程序的设计和编写就应避免垃圾对象的内存占用和GC的开销。显示调用System.GC()只能建议JVM需要在内存中对垃圾对象进行回收,但不是必须马上回收,一个是并不能解决内存资源耗空的局面,另外也会增加GC的消耗。
相关推荐
JAVA内存溢出问题总结
”操作符 22<br><br>2.4 表达式与关键词 22<br><br>0045 正确使用“&&”和“||” 22<br><br>0046 如何处理程序“溢出”错误 23<br><br>0047 有效使用base关键字 23<br><br>0048 typeof表达式的使用 23<br...
<br> <br><br>文件1:iisidqoverflow.cpp (主文件)<br><br><br><br>#include <br>#include "snakesocket.h"<br>#include "wsastart.h"<br>#include "SkShellCodeFunc.h"<br><br>//function predeclare.<br>//取得 ...
根据两个键搜索<br>3.6.8. 根据天计算访问量<br>3.6.9. 使用AUTO_INCREMENT<br>3.7. 孪生项目的查询<br>3.7.1. 查找所有未分发的孪生项<br>3.7.2. 显示孪生对状态的表<br>3.8. 与Apache一起使用MySQL<br>4. MySQL...
<br>7.1.5.1 名字的大小写敏感性 <br>7.2 用户变量 <br>7.3 列类型 <br>7.3.1 列类型的存储要求 <br>7.3.5 数字类型 <br>7.3.6 日期和时间类型 <br>7.3.6.1 问题和日期类型 <br>7.3.6.2 DATETIME,DATE和TIMESTAMP...
JAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.doc
事件驱动解析是把文件转换成xml,然后一边读取一边解析,这样就对内存的占用就会很少,可以很好的处理poi出现OOM的问题。 maven添加需要的jar包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>...
引言,我做文章管理的时候,引入的是layui的表格样式,但是里面的内容溢出无法隐藏,后来我采用了往td里面加了个<div></div> 然后设置一下样式就可以了。 <table class=layui-table> <colgroup> <col width=100...
Bug修正:<br> ·解决内存溢出Bug<br> ·解决字符串乱码Bug<br> `解决拖拽位置不正常Bug<br>2. 功能添加:<br> ·添加SystemPropertiesReader类,用于解析系统配置文件system.properties<br> ·完成软件的国际化,...
静态图片缩放功能<br>·颜色拾取功能<br>·测量尺功能<br><br>特性:<br>·支持鼠标拖拽窗体和小控件<br>·支持国际化<br>·可扩展架构<br><br>日志:<br>20080621<br>1. Bug修正:<br> ·修正退出时报异常的Bug<br>...
<BR>3、常见异常实例包括:数组下标越界,算法溢出(超出数值表达范围),除数为零,无效参数、内存溢出<BR>异常处理功能:主要处理一些同步异常(除数为0),不宜处理一些异步事件(Disk I/O End、网络信息到达、...
它提供了比其它 PC 压缩工具更高<br> 的压缩率,特别适用于处理可执行文件,对象库,大的文本文件等。<br><br> * WinRAR 提供了一个可选的,对多媒体数据高度优化的压缩运算法。<br><br> * WinRAR 支持文件和压缩...
Bug修正: <br>·解决内存溢出Bug <br>·解决字符串乱码Bug <br>`解决拖拽位置不正常Bug <br>2. 功能添加: <br>·添加SystemPropertiesReader类,用于解析系统配置文件system.properties <br>·完成软件的国际化,...
经典缓冲区溢出攻击源代码,包含详细的分析文档,不可多得的<br><br>资源,对于理解缓冲区溢出原理以及汇编语言有很好的帮助。《<br><br>深入理解计算机系统》一书中使用到的例子,我将这个例子进行<br><br>了详细的...
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
【Java面试题】Java内存溢出
Java内存溢出解决办法 加大Tomcat使用Jvm内存(转载) 注重版权 Caused by: java lang OutOfMemoryError: Java heap space 错误原因及解决方法
完美解决java读取excel内存溢出问题,希望可以帮到大家
java内存泄露、溢出检查方法和工具。 步骤: 1,使用linux命令生存堆栈文件 2,用MemoryAnalyzer.exe工具打开 3,根据工具生成的饼状图可以清晰的找出内存泄漏源
MS05-039 Scan v1.0,这是一款...<br><br>Microsoft Windows Server 2003 (All Versions)<br>Microsoft Windows XP (All Versions)<br>Microsoft Windows 2000 (All Versions)<br><br>For more information see:<br><br>...