MyEclipse内存溢出问题
2015-08-06 17:56
453 查看
知识点说明
堆(Heap)和非堆(Non-heap)内存
堆内存分配
非堆内存分配
JVM内存限制(最大值)
VM的非堆内存溢出解决方案
解决方案
堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。 举例说明含义: -Xms128m 表示JVM Heap(堆内存)最小尺寸128MB,初始分配 -Xmx512m 表示JVM Heap(堆内存)最大允许的尺寸256MB,按需分配。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。举例说明含义: -XX:PermSize=64MB 最小尺寸,初始分配 -XX:MaxPermSize=256MB 最大允许分配尺寸,按需分配 过小会导致:java.lang.OutOfMemoryError: PermGen space
JVM内存限制(最大值)
首先JVM内存限制于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。
VM的非堆内存溢出解决方案
解决方案
打开 myeclipse.ini 调大-XX:MaxPermSize=192M为512M,或h-XX ermSize 调成跟-XX:MaxPermSize一样大。7.0后没有-XX ermSize了。要注意:XX:MaxPermSize、Xmx之和不能超过电脑内存。
相关文章推荐
- MyEclipse Web Project转Eclipse Dynamic Web Project
- MyEclipse常用配置图文教程
- MyEclipse连接MySQL数据库报错解决办法
- 在myeclipse中如何加入jquery代码提示功能
- MyEclipse 6.0.1 6.0GA 6.0M1 5.5GA 5.1.1GA 注册码及高速下载地址
- javascript在myeclipse中报错的解决方法
- eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 配置数据库连接池
- eclipse+myeclipse 环境配置方法
- 设置Myeclipse中的代码格式化、注释模板及保存时自动格式化
- myeclipse安装jQuery插件的方法
- MyEclipse到期破解代码分享
- myeclipse智能提示设置的实现方法
- 用MyEclipse配置DataBase Explorer(图示)
- Struts2 入门小程序 -- Myeclipse 9.1下
- SpringMVC入门小程序 -- Myeclipse 9.1下
- SpringMVC+Spring3+Hibernate4
- maven 使用 问题记录
- MyEclipse7.5+JDK1.6+Tomcat6+Struts1.3+MySQL4.1开发演示
- 图文教程:使用MyEclipse的hibernate工具从数据库反向生成实体Bean
- STS,MyEclipse中Maven配置