注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

Java虚拟机支持的最大内存限制  

2009-04-20 17:27:31|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近在开发Java的程序。本来我是一直很喜欢Java的内存管理的,不需要担心分配内存,只管分配,垃圾收集器自己会给你回收内存的。现在开发的 程序数据量很大,为了速度快,我准备把所有的信息加载进内存,这样可以保证快速响应。我还在反复算内存,想想自己的数据量,现在刚开始的时候应该够了(我 的机器是4G内存,虽然Windows就认3.5G,但是比起我现在的数据量应该没问题)。

没想到第一个实验的程序,跑了几个小时,就遇到了Out of Memory Exception了。看看自己的虚拟机设置,我设置的是-Xms512M -Xmx1024M。想都没想,直接改成-Xms512M -Xmx2048M,结果直接就Could not reserve enough space for object heap。程序都起不来了。这才发现原来最大内存还有限制。上网搜了一下,发现很多讨论这个问题的文章。最终在BEA的DEV2DEV论坛发现了最有用的 一篇http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID= 35704&start=0&tstart=0

这里的版主YuLimin 做了测试,得出结论:

公司 JVM版本                  最大内存(兆)client    最大内存(兆)server

SUN 1.5.x                          1492                            1520

SUN 1.5.5(Linux)             2634                            2660

SUN 1.4.2                          1564                            1564

SUN 1.4.2(Linux)             1900                            1260

IBM 1.4.2(Linux)             2047                             N/A

BEA JRockit 1.5 (U3)      1909                             1902

我现在用的是JDK1.6. 0_05,测试了一下。在Client状态下最大是,我的JDK不认-Server参数,测试不了Server状态。估计差不多。

SUN 1.6.0                          1442                           N/a

看样子用Java想用大内存也是不可能的了。而且一般的说法是内存太大了,垃圾收集的时间就会长。这也可以理解,一般是内存不够用了才收集的,扫描2G内存比1G当然要慢多了,而且内存对象多了,估计关系是指数上升的。

下面附上YuLimin的测试方法和测试记录。

测试方法:在命令行下用 java -XmxXXXXM -version 命令来进行测试,然后逐渐的增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息。

测试记录:

我在Windows 2000 ADS上面测试内存使用的结果如下

SUN的1.2.2、1.3.1、1.4.2、1.5.0、IBM1.4.2、BEA JRockit 1.4.2

F:\JDK\1.2.2\bin>java -Xmx700000255M -version

java version “1.2.2″

Classic VM (build JDK-1.2.2_017, native threads, symcjit)

F:\JDK\1.2.2\bin>java -Xmx700000256M -version

Bad max heap size: -Xmx700000256M

Could not create the Java virtual machine.

=====================================================================

F:\JDK\1.3.1\bin>java -version

java version “1.3.1_18″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_18-b01)

Java HotSpot(TM) Client VM (build 1.3.1_18-b01, mixed mode)

F:\JDK\1.3.1\bin>REM If present, the option to select the VM must be first.

F:\JDK\1.3.1\bin>REM The default VM is -hotspot.

F:\JDK\1.3.1\bin>java -hotspot -Xmx1554M -version

java version “1.3.1_18″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_18-b01)

Java HotSpot(TM) Client VM (build 1.3.1_18-b01, mixed mode)

F:\JDK\1.3.1\bin>java -hotspot -Xmx1555M -version

Error occurred during initialization of VM

Could not reserve enough space for object heap

F:\JDK\1.3.1\bin>java -server -Xmx1522M -version

java version “1.3.1_18″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_18-b01)

Java HotSpot(TM) Server VM (build 1.3.1_18-b01, mixed mode)

F:\JDK\1.3.1\bin>java -server -Xmx1523M -version

Error occurred during initialization of VM

Could not reserve enough space for object heap

F:\JDK\1.3.1\bin>java -classic -Xmx2047M -version

java version “1.3.1_18″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_18-b01)

Classic VM (build 1.3.1_18-b01, native threads, nojit)

F:\JDK\1.3.1\bin>java -classic -Xmx2048M -version

Bad max heap size: -Xmx2048M

Could not create the Java virtual machine.

=====================================================================

F:\JDK\1.4.2\bin>java -version

java version “1.4.2_12″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)

Java HotSpot(TM) Client VM (build 1.4.2_12-b03, mixed mode)

F:\JDK\1.4.2\bin>REM The default VM is client.

F:\JDK\1.4.2\bin>java -client -Xmx1308M -version

java version “1.4.2_12″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)

Java HotSpot(TM) Client VM (build 1.4.2_12-b03, mixed mode)

F:\JDK\1.4.2\bin>java -client -Xmx1309M -version

Error occurred during initialization of VM

Could not reserve enough space for object heap

F:\JDK\1.4.2\bin>java -server -Xmx1308M -version

java version “1.4.2_12″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)

Java HotSpot(TM) Server VM (build 1.4.2_12-b03, mixed mode)

F:\JDK\1.4.2\bin>java -server -Xmx1309M -version

Error occurred during initialization of VM

Could not reserve enough space for object heap

F:\JDK\1.4.2\bin>REM -hotspot      is a synonym for the “client” VM [deprecated]

F:\JDK\1.4.2\bin>java -hotspot -Xmx1308M -version

java version “1.4.2_12″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)

Java HotSpot(TM) Client VM (build 1.4.2_12-b03, mixed mode)

F:\JDK\1.4.2\bin>java -hotspot -Xmx1309M -version

Error occurred during initialization of VM

Could not reserve enough space for object heap

=====================================================================

F:\JDK\1.5.0\bin>java -version

java version “1.5.0_07″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)

Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode, sharing)

F:\JDK\1.5.0\bin>java -client -Xmx1492M -version

java version “1.5.0_07″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)

Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode)

F:\JDK\1.5.0\bin>java -client -Xmx1493M -version

Error occurred during initialization of VM

Could not reserve enough space for object heap

Could not create the Java virtual machine.

F:\JDK\1.5.0\bin>java -server -Xmx1504M -version

java version “1.5.0_07″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)

Java HotSpot(TM) Server VM (build 1.5.0_07-b03, mixed mode)

F:\JDK\1.5.0\bin>java -server -Xmx1505M -version

Error occurred during initialization of VM

Could not reserve enough space for object heap

Could not create the Java virtual machine.

F:\JDK\1.5.0\bin>REM -hotspot      is a synonym for the “client” VM [deprecated]

F:\JDK\1.5.0\bin>java -hotspot -Xmx1492M -version

java version “1.5.0_07″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)

Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode)

F:\JDK\1.5.0\bin>java -hotspot -Xmx1493M -version

Error occurred during initialization of VM

Could not reserve enough space for object heap

Could not create the Java virtual machine.

=====================================================================

F:\JDK\IBM142\bin>java -version

java version “1.4.2″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2)

Classic VM (build 1.4.2, J2RE 1.4.2 IBM Windows 32 build cn1420-20040626 (JIT enabled: jitc))

F:\JDK\IBM142\bin>REM The default VM is client.

F:\JDK\IBM142\bin>java -Xmx2047M -version

java version “1.4.2″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2)

Classic VM (build 1.4.2, J2RE 1.4.2 IBM Windows 32 build cn1420-20040626 (JIT enabled: jitc))

F:\JDK\IBM142\bin>java -Xmx2048M -version

[ Unable to allocate an initial java heap of 2147483648 bytes. ]

[ **Out of memory, aborting** ]

[ ]

[ *** panic: JVMST016: Cannot allocate memory for initial java heap ]

abnormal program termination

=====================================================================

F:\BEA\JRockit\bin>java -version

java version “1.4.2_05″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)

BEA WebLogic JRockit(TM) 1.4.2_05 JVM R24.4.0-1 (build ari-38120-20041118-1131-win-ia32, Native Threads, GC strategy: parallel)

F:\BEA\JRockit\bin>REM The default VM is jrockit.

F:\BEA\JRockit\bin>java -Xmx1617M -version

java version “1.4.2_05″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)

BEA WebLogic JRockit(TM) 1.4.2_05 JVM R24.4.0-1 (build ari-38120-20041118-1131-win-ia32, Native Threads, GC strategy: parallel)

F:\BEA\JRockit\bin>java -Xmx1618M -version

Unable to acquire some virtual address space - reduced from 1656832 to 1640260 KB!

java version “1.4.2_05″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)

BEA WebLogic JRockit(TM) 1.4.2_05 JVM R24.4.0-1 (build ari-38120-20041118-1131-win-ia32, Native Threads, GC strategy: parallel)

F:\BEA\JRockit\bin>REM -jrockit      to select the “jrockit” VM

F:\BEA\JRockit\bin>java -jrockit -Xmx1617M -version

java version “1.4.2_05″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)

BEA WebLogic JRockit(TM) 1.4.2_05 JVM R24.4.0-1 (build ari-38120-20041118-1131-win-ia32, Native Threads, GC strategy: parallel)

F:\BEA\JRockit\bin>java -jrockit -Xmx1618M -version

Unable to acquire some virtual address space - reduced from 1656832 to 1640260 KB!

java version “1.4.2_05″

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)

BEA WebLogic JRockit(TM) 1.4.2_05 JVM R24.4.0-1 (build ari-38120-20041118-1131-win-ia32, Native Threads, GC strategy: parallel)

我的测试记录:

C:\>java -client -Xmx1441M -version

java version “1.6.0_05″

Java(TM) SE Runtime Environment (build 1.6.0_05-b13)

Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode)

C:\>java -client -Xmx1442M -version

java version “1.6.0_05″

Java(TM) SE Runtime Environment (build 1.6.0_05-b13)

Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode)

C:\>java -client -Xmx1443M -version

Error occurred during initialization of VM

Could not reserve enough space for object heap

Could not create the Java virtual machine.

C:\>java -server -Xmx1443M -version

Error: no `server’ JVM at `C:\Program Files\Java\jre1.6.0_05\bin\server\jvm.dll’.

  评论这张
 
阅读(1942)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016