你知道如何解决JVM内存溢出问题吗?这里给大家分享一下,JVM为开发者管理的内存堆和非堆两种类型。以上是JVM启动时创建一个非堆供JVM本身用来存储类信息
JVM内存溢出详细解决方案
JVM内存溢出的类型
JVM内存溢出的类型
javalangOutOfMemoryError:PermGenspace
JVM管理的Java内存有堆和非堆两种类型。堆由开发人员使用。上面提到的是非堆是在JVM启动时创建的。它是为JVM本身保留的,用于存储类信息。GC在堆执行的不同时期不会释放空间。如果webapp使用大量的第三方jar或者应用程序的class文件太多而MaxPermSize设置太小,也会造成这个内存问题。太忙,导致JVM内存溢出或者Tomcat热部署时,不会清理之前加载的环境,只会用新部署的非堆栈内容改变上下文。
PermGenspace的全称是PermanentGenerationspace,指的是内存的永久存储区域。这块内存主要被JVM用来存储类信息,当Loader加载时,meta会被放置在PermGenspace中。它与存放类的实例(Instance)的Heap区不同。GC(垃圾收集)则不同。PermGenspace在主程序执行过程中会被清理,所以如果应用程序中有很多CLASSES,就会出现PermGenspace错误。这个错误很可能发生,常见于web服务器准备JSP的时候,如果你的WEBAPP使用了大量的第三方jar的大小超过了jvm默认的大小(M),就会产生这个错误信息。p>
一个更好的配置示例(经我验证,自从使用此配置后,Tomcat从未死机)
setJAVA_OPTS=Xmsm
javalangOutOfMemoryError:Javaheapspace
我们来看第二种JVM内存溢出的情况。第一种情况是补充。主要问题是在这种情况下它的默认空间(即.如果剩余内存超过%,JVM就会将堆收缩到Xms设置的值,然后是Xmx。服务器机器在g和g之间,但位大小不是。有一个限制
GC垃圾收集的作用JVM调用GC的频率还是很高的。垃圾收集主要在两种情况下进行
当应用程序线程空闲时和另一种是Java内存堆不足时。如果连续回收不能解决内存不足的堆问题,就会报内存不足的堆错误,由于这种异常是由系统的运行环境决定的,所以无法预测它何时会出现。根据GC机制,运行程序会导致系统工作环境的变化增加GC触发的可能性
lishixinzhi/Article/program/Java/hx/201311/26579上一篇:jvm内存溢出之前要dump文件
下一篇:jvm内存溢出解决方案