



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java内存溢出与JVM堆设置前言最近在开发一个J2EE架构的项目,在我笔记本的跑一点问题都没有,可是移植到台式机上就跑不起来了,总是报Java heap space,所以百度 + 谷歌(现在访问不了)下,了解相关的运行机制,并找出解决方案。1. java.lang.OutOfMemoryError: Java heap space解释:JVM 堆的设置是指 java 程序运行过程中 JVM 可以调配使用的内存空间的设置。JVM 在启动的时候会自动设置 Heap size 的值,其初始空间(即-Xms)是物理内存的 1/64,最大空间(-Xmx)是物理内存的 1/4。可以利用 JVM 提供的-Xmn -Xms -Xmx 等选项可进行设置。Heap size 的大小是 Young Generation 和 Tenured Generaion 之和。在 JVM 中如果 98的时间是用于 GC 且可用的 Heap size 不足 2的时候将抛出此异常信息。提示:Heap Size 最大不要超过可用物理内存的80,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。2. java.lang.OutOfMemoryError: PermGen space解释PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space。从文字上看就是内存溢出,解决方法是加大内存。为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。一般由 -XX:PermSize 和 -XX:MaxPermSize控制。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。提示:-XX:PermSize 和 -XX:MaxPermSize 设置不宜过大,具体需要根据实际情况,下面给出1G物理内存示例:-XX:PermSize=64M -XX:MaxPermSize=128M3. 参数汇总-Xms :表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配。有可能真的按照这样的一个规则分配时,设计出的软件还没有能够运行得起来就挂了。-Xmx :表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。但是开发过程中,通常会将 -Xms 与 -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。一般来讲对于堆区的内存分配只需要对上述-Xms和-Xmx两个参数进行合理配置即可,但是如果想要进行更加精细的分配还可以对堆区内存进一步的细化,那就要用到下面的三个参数了-XX:newSize、-XX:MaxnewSize、-Xmn。当然这源于对堆区的进一步细化分:新生代、中生代、老生代。java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。而接下来要讲述的三个参数是用来控制新生代内存大小的。-XX:newSize:表示新生代初始内存的大小,应该小于 -Xms的值;-XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于 -Xmx的值;-Xmn:至于这个参数则是对-XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize =-XX:MaxnewSize =-Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的上面所述即为java虚拟机对外提供的可配置堆区的参数,接下来讲述java虚拟机对非堆区内存配置的两个参数:-XX:PermSize:表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)-XX:MaxPermSize:表示对非堆区分配的内存的最大上限。4. 各种运行环境解决方案 手动设置 Heap sizeLinux平台修改TOMCAT_HOME/bin/catalina.sh,在“cygwin=false”上一行加入如下参数:JAVA_OPTS=-Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256mWindows平台Tomcat安装版第一种方式:打开注册表(命令:regedit) ,修改注册表HKEY_LOCAL_MACHINESOFTWAREApacheSoftware Foundation Tomcat Service ManagerTomcat6ParametersJavaOptions在后面加上:-Xms512m-Xmx512m-XX:PermSize=128m-XX:MaxPermSize=256m-Dcom.sun.management.jmxremote=true第二种方式:点击应用“Tomcat6w.exe”,找到 “Java”标签,在“Java Options”添加以上参数Windows平台Tomcat解压版在文件catalina.bat文件中的第一行添加如下:set JAVA_OPTS= -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m特别注意:在这里吃过亏使用 MyEclipse 启动 Tomcat 时 需要在 MyEclipse 中设置,在Tomcat中设置无效。位置:Window - Preferences - MyEclipse Enterpri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业机车安全操作培训课件
- 农业大棚安全培训计划课件
- 内镜感控培训课件
- 兴宁宝华园课件公司
- 金融公司借款合同模板5篇
- 电影院会员卡营销方案(3篇)
- 化学物品安全培训周记课件
- 兖州太阳安全培训中心课件
- 七上3《雨的四季》作业设计(含答案)
- 化妆造型培训课件
- 《餐饮点菜》课件
- 公司财务知到智慧树章节测试课后答案2024年秋北京第二外国语学院
- 工厂交叉作业安全管理协议书(2篇)
- 中考英语完型填空常用短语
- 宣传物料技术服务方案设计
- 暴聋(突发性耳聋)中医临床路径及入院标准2020版
- 部编高教版2023·职业模块 中职语文 2.《宁夏闽宁镇:昔日干沙滩今日金沙滩》 课件
- 【MOOC】生命的教育-浙江大学 中国大学慕课MOOC答案
- 高血压个案护理案例
- 四川省三级综合医院评审标准实施细则(2023年版)
- 心肺复苏术课件2024新版
评论
0/150
提交评论