探究两大Java内存溢出类型

你知道如何解决Java内存溢出问题吗,这里和大家分享一下,JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。

创新互联建站专业为企业提供武宁网站建设、武宁做网站、武宁网站设计、武宁网站制作等企业网站建设、网页设计与制作、武宁企业网站模板建站服务,10多年武宁做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

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死掉的情况)

 
 
 
  1. setJAVA_OPTS=-Xms800m  
  2. -Xmx800m-XX:PermSize=128M 
  3. -XX:MaxNewSize=256m 
  4. -XX:MaxPermSize=256m 
  5.  

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的消耗。

【编辑推荐】

  1. Java内存溢出的详细解决方案
  2. JVM体系结构目的和原理
  3. JVM.dll装载过程与源代码分析
  4. 巧解使Eclipse崩溃的JVM terminated问题
  5. 解决JVM Terminated.ExitCode=-1问题行之有效的方法

网页名称:探究两大Java内存溢出类型
文章起源:http://www.shufengxianlan.com/qtweb/news29/176029.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联