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内存溢出的解决方法
一、内存溢出类型1、fMemoryError: PermGen spaceJVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空 -
经典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 API)
传说今晚,仙女下凡,许个心愿,牛郎织女见个面,银河星星时变迁,万千山水,时光流转,不变的是我对你的誓言:爱你,永远!下面是小编精心整理的人生经典语录36条,欢迎大家借鉴与参考,希望对大家有所帮助。1、因为你的存在,让我变得不是我 -
Java import以及Java类的搜索路径
Java 官方为开发者提供了很多功能强大的类,这些类被分别放在各个包中,随JDK一起发布,称为Java类库或Java API。下面小编为你分享Java import以及Java类的搜索路径,欢迎大家阅读!更多相关信息请关注相关栏目!如果你希望使用J -
Java认证考试知识点:Java时间类的函数
学习是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的`,必须养成平时努力学习的习惯,Java也不例外,下面小编为大家整理了Java里时间类以及函数的相关文章: 1Calendar和Date的转化(1)Calendar转化 -
计算机二级Java入门教程:Java类的基本构成
易乐亲子学员倾情协作为挑剔设计师麻麻制作的黑胡桃实木砧板,惊喜哦!主要材料:实木黑胡桃木料30cm*20cm 1块所需工具:安全锯 1把黄金锉 1把金工锉 1套120-5000目砂纸 1套木蜡油 1点安全防护工具——手套、口 -
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("="));}/**