JAVA内存溢出解决方案.doc

JAVA内存溢出解决方案.doc

ID:59119928

大小:91.50 KB

页数:13页

时间:2020-09-15

JAVA内存溢出解决方案.doc_第1页
JAVA内存溢出解决方案.doc_第2页
JAVA内存溢出解决方案.doc_第3页
JAVA内存溢出解决方案.doc_第4页
JAVA内存溢出解决方案.doc_第5页
资源描述:

《JAVA内存溢出解决方案.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

2、nspace的全称是PermanentGenerationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGenspace错误,这种错误常见在web服务器对JSP进行precompile的时候。如果你的WEBAPP下都用了大量的第三方jar,其大小超过了j

3、vm默认的大小(4M)那么就会产生此错误信息了。一个最佳的配置例子:(经过本人验证,自从用此配置之后,再未出现过tomcat死掉的情况)setJAVA_OPTS=-Xms800m-Xmx800m-XX:PermSize=128M-XX:MaxNewSize=256m-XX:MaxPermSize=256m1.2.java.lang.OutOfMemoryError:Javaheapspace第一种情况是个补充,主要存在问题就是出现在这个情况中。其默认空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。如果内存剩余不到40%,JVM就会增大

4、堆到Xmx设置的值,内存剩余超过70%,JVM就会减小堆到Xms设置的值。所以服务器的Xmx和Xms设置一般应该设置相同避免每次GC后都要调整虚拟机堆的大小。假设物理内存无限大,那么JVM内存的最大值跟操作系统有关,一般32位机是1.5g到3g之间,而64位的就不会有限制了。注意:如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。垃圾回收GC的角色JVM调用GC的频度还是很高的,主要两种情况下进行垃圾回收:当应用程序线程空闲;另一个是java内存堆不足时,会不断调用GC,若连续回收都解决不了内存堆不

5、足的问题时,就会报outofmemory错误。因为这个异常根据系统运行环境决定,所以无法预期它何时出现。根据GC的机制,程序的运行会引起系统运行环境的变化,增加GC的触发机会。为了避免这些问题,程序的设计和编写就应避免垃圾对象的内存占用和GC的开销。显示调用System.GC()只能建议JVM需要在内存中对垃圾对象进行回收,但不是必须马上回收,一个是并不能解决内存资源耗空的局面,另外也会增加GC的消耗。2.JVM内存区域组成简单的说java中的堆和栈;java把内存分两种:一种是栈内存,另一种是堆内存。2.1.栈在函数中定义的基本类型变量和对象的引用变量都在函数的栈

6、内存中分配;在函数(代码块)中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的内存空间。栈调整:参数有+UseDefaultStackSize-Xss256K,表示每个线程可申请256k的栈空间,每个线程都有他自己的Stack。l优势是存取速度比堆要快;l缺点是存在栈中的数据大小与生存期必须是确定的无灵活性。2.2.堆堆内存用来存放由new创建的对象和数组;在堆中分配的内存由java虚拟机的自动垃圾回收器来管理。java堆分为三个区:New、Old和Permanent。GC有两个线程:新创建的对象被分

7、配到New区,当该区被填满时会被GC辅助线程移到Old区,当Old区也填满了会触发GC主线程遍历堆内存里的所有对象。Old区的大小等于Xmx减去-Xmn。l优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的;l缺点就是要在运行时动态分配内存,存取速度较慢。3.JVM如何设置虚拟内存提示:在JVM中如果98%的时间是用于GC且可用的Heapsize不足2%的时候将抛出此异常信息。提示:HeapSize最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。提示:JVM初始分配

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。