关于Myeclipse下的JVM启动异常的问题:Out Of Memery / Could not reserve enough space for object heap
1、按照jvm的设计规则,JVM内存分为堆(Heap)和非堆(Non-heap)内存
"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。","在JVM中堆之外的内存称为非堆内存(Non-heap memory)"。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所有用到的方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
(1)堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
(2)非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
2、根据上面的分析已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统,-Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。
参考:http://blog.sina.com.cn/s/blog_59d8af510100y6gz.html
我使用的是myeclipse10自带的Tomcat6,因为涉及到数据库数据的导入导出,因此经常报出Out Of Memery 或则 Could not reserve enough space for object heap的问题。
a),Out Of Memery是内存溢出,通常是在程序运行过程中抛出的错误,当我们不断的通过new创建实例时,显然这是我们的堆内存不够用了,这时只需将-Xmx和-Xms同时增大即可(到底能加多大,下面再说)。
b),Could not reserve enough space for object heap,无法实例化,这也是在程序运行过程中抛出的错误,根据上面的介绍,我们知道这是JVM的非堆内存不够造成的,因此我们需要将XX:MaxPermSize的值是当增大。
c),无法启动虚拟机,通常情况下这是因为我们的内存配置的不合理。
我们可以在DOS命令行下,输入>java -XmxXXXXM -version来查看系统还有JDK最大管理的内存大小(不是越大越好哦),XXXX指代具体的值。不同的JDK,可管理的内存空间大小不一样。
参考:http://blog.sina.com.cn/s/blog_56d8ea900100c3tf.html。
最新文章
- Qt5.5.1编译出来的程序出现libgcc_s_dw2-1.dll的解决方案
- dsp28377控制DM9000收发数据——第二版程序,能够实现手术功能,但是容易掉帧;使用读取中断寄存器的方式判断中断
- C# 部分语法总结(入门经典)
- VS2013-解决error C4996: 'fopen'问题
- iOS CLLocationManager 定位
- iOS 16进制字符串转换成int十进制
- 使用Python画ROC曲线以及AUC值
- JavaScript高级程序设计56.pdf
- build Intent
- HDU 4344 随机法判素数(费马小定理
- css font简写规则
- 如何一步一步用DDD设计一个电商网站(十四)—— 回顾与总结
- Python算法——二叉树
- 微信小程序之:wepy框架
- [Linux] awk与posix字符集
- JS对象1
- powerdesigner 使用心得 comment、name
- bash编程-正则表达式
- [算法]最小的K个数和数据流中的中位数
- nginx 总结
热门文章
- Linux--shell交互输入与循环语句--06
- 211-基于FMC的ADC-DAC子卡
- 树莓派 msmtp和mutt 的安装和配置
- [MethodImpl(MethodImplOptions.Synchronized)]、lock(this)与lock(typeof(...))
- Python---基础---循环,函数
- pandas.DataFrame.drop_duplicates 用法说明
- win8安装maven
- [USACO2011 Feb]Best Parenthesis
- Android多线程方案
- C#防止窗口重复打开