Java内存溢出的类型
内存溢出通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。下面小编为大家整理了关于Java内存溢出的类型,一起来看看吧:
1、fMemoryError: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
2、fMemoryError: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的开销。显示调用()只能建议JVM需要在内存中对垃圾对象进行回收,但不是必须马上回收,一个是并不能解决内存资源耗空的局面,另外也会增加GC的消耗。
相關文章
-
Java内存溢出的解决方法
从某件事情上得到收获以后,写一篇心得体会,记录下来,通过写心得体会,可以帮助我们总结积累经验。那么如何写心得体会才能更有感染力呢?以下是小编为大家收集的国小国培教师培训心得体会,希望能够帮助到大家。国小国培教师培 -
经典Java面试题之Java中Char类型的运算
char在java中称为字符型,占2个字节。本文是本站小编搜索整理的关于经典Java面试题之Java中Char类型的运算,有需要的小伙伴可以参考一下,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网! [面试 -
java中JVM虚拟机内存模型详细说明
以下是本站小编为大家收集的java中JVM虚拟机内存模型详细说明内容,欢迎阅读学习! JVM的内部结构如下图:java中JVM虚拟机内存模型详细说明 - 天涯草 - 天涯草一个优秀Java程序员,必须了解Java内存模型、GC工作原理,以及 -
Java 2.1 java基本类型的转换和运算符
导语:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。下面我们来看看Java 2.1 java基本类型的转换和运算符,希望对大 -
Java的内存模型
在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式的通信。同步指的是程序在控制多个线程之间执行程序的相对顺序 -
Java类库及其组织结构(Java API)
传说今晚,仙女下凡,许个心愿,牛郎织女见个面,银河星星时变迁,万千山水,时光流转,不变的是我对你的誓言:爱你,永远!下面是小编精心整理的人生经典语录36条,欢迎大家借鉴与参考,希望对大家有所帮助。1、因为你的存在,让我变得不是我 -
Java import以及Java类的搜索路径
明星刘海大全,来看看明星都留什么刘海吧。都是非常漂亮的刘海发型了,可要认真来看看,不要错过哦。圆形脸谢娜刘海偏分而有层次的发帘能够使脸形看起来修长一些,最好能与两侧的头发自然衔接,制造出飘逸的下垂感。如果是短 -
Java认证考试知识点:Java时间类的函数
学习是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的`,必须养成平时努力学习的习惯,Java也不例外,下面小编为大家整理了Java里时间类以及函数的相关文章: 1Calendar和Date的转化(1)Calendar转化 -
计算机二级Java入门教程:Java类的基本构成
理清考试题目的重点有助于我们更快更好的掌握考试方法,以下本站小编整理的计算机二级Java入门教程:Java类的基本构成,欢迎阅读! 三:Java类的基本构成 1:Java 类的定义形式一个完整的 Java 类通常由下面六个部分组成: -
Java认证基础知识:java字符串转化整型问题
java 字符串转化整型问题public class StringParesInteger {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubtln(_VALUE);tln(_VALUE/10);tln(pareseInt("="));}/**