`
wangdei
  • 浏览: 372821 次
社区版块
存档分类
最新评论

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

阅读更多

最近在开发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:\Documents and Settings\xiaoyuma>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:\Documents and Settings\xiaoyuma>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:\Documents and Settings\xiaoyuma>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:\Documents and Settings\xiaoyuma>java -server -Xmx1443M -version
Error: no `server’ JVM at `C:\Program Files\Java\jre1.6.0_05\bin\server\jvm.dll’.

分享到:
评论
1 楼 从此醉 2014-01-22  
楼主倒是给出解决办法啊

相关推荐

    深入java虚拟机笔记

    - **Java Class文件**:Java字节码是平台无关的,可以在任何支持Java虚拟机的平台上运行。 - **可伸缩性**:Java平台支持从小型嵌入式设备到大型服务器的不同规模的应用程序开发。 - **影响平台无关的因素**: -...

    Java虚拟机在ARM—Linux平台的移植研究.pdf

    Java虚拟机是一种运行Java程序的抽象计算机,具有指令集和存储区域,负责执行指令、管理数据、内存和寄存器。Java虚拟机是Java技术的重要组成部分,是程序与操作系统和硬件无关的关键。 在嵌入式Linux系统下,Java...

    Java运行原理与Java虚拟机.pdf

    ### Java运行原理与Java虚拟机 #### 一、Java运行原理概述 Java作为一种跨平台的编程语言,其独特之处在于它的编译和解释过程。Java程序的执行涉及到两个主要步骤:首先是编译阶段,其次是解释执行阶段。 1. **...

    Java虚拟机工作原理详解

    Java虚拟机工作原理详解 Java虚拟机工作原理详解是 Java 程序执行的核心组件之一。了解 Java 虚拟机的工作原理对 Java 开发人员来说非常重要。本文将详细介绍 Java 虚拟机工作原理的详细过程和类加载器的工作机理。...

    Java 虚拟机.pdf

    在JDK 1.8之前,HotSpot虚拟机将其视为永久代,而现在被移到元空间,位于本地内存而非虚拟机内存。 6. 运行时常量池:是方法区的一部分,包含编译期生成的常量和符号引用,也支持运行时动态生成常量(如String的...

    java写的java虚拟机

    Java虚拟机(JVM)是Java编程语言的核心组成部分,它是一个能够执行字节码的软件或硬件系统。Java写的Java虚拟机,意味着我们探讨的是一个用Java语言实现的JVM,这在开源社区中并不罕见,例如OpenJDK的HotSpot JVM...

    一个Java虚拟机的设计和实现

    ### 一个Java虚拟机的设计和实现 #### 第一章 绪论 ##### 1.1 Java及Java虚拟机 Java不仅是一种广泛使用的编程语言,更是一整套技术栈,其中包括了Java编程语言、Java类文件格式、Java虚拟机(JVM)以及Java应用...

    Java虚拟机规范(Java SE 7)

    - **限制**:由于Java虚拟机规范侧重于描述虚拟机的行为,而不是具体的实现细节,因此对于优化JVM性能或分析程序执行行为的问题,本书提供的帮助有限。 ##### 3. 译者贡献与翻译特点 - **翻译背景**:周志明、吴...

    java虚拟机参数配置

    在Java开发过程中,Java虚拟机(JVM)的性能调优是提高应用程序运行效率的关键环节之一。通过合理的JVM参数配置,可以有效地管理内存分配、垃圾回收等关键资源,从而提升程序的稳定性和响应速度。本文将围绕"java...

    精品:java虚拟机分析与优化PPT

    - Java具有“一次编写,到处运行”的特性,本质上是解释型的,没有JIT编译器的支持,其性能会受到限制。 - JIT编译器将频繁使用的字节码转换为本地代码,从而显著提高程序执行速度。 #### 二、内存管理和垃圾回收...

    java虚拟机整理文档(面试使用)

    Java虚拟机(JVM)是Java程序运行的核心,它提供了执行字节码的环境,使得Java具有跨平台的能力。在面试中,对于Java开发者来说,深入理解JVM的工作原理和内存管理是至关重要的。以下是对Java虚拟机相关知识点的详细...

    JVM内幕:java虚拟机详解

    Java虚拟机支持并发执行多个线程。HotSpot JVM中的Java线程与底层操作系统的线程是一一对应的。每当创建一个新的Java线程时,JVM会在操作系统中创建一个对应的原生线程。当Java线程结束时,对应的原生线程也会被销毁...

    Java虚拟机资料(5个文件)

    本文将深入探讨Java虚拟机的工作原理,JVM内存结构,以及一些高级特性与最佳实践。 1. **JVM内存结构** - **堆内存**:这是Java应用程序的主要内存区域,用于存储对象实例。在Java中,所有对象都在堆上分配内存。...

    Java虚拟机.pdf

    ### Java虚拟机(JVM)详解 #### 一、概述 Java虚拟机(Java Virtual Machine,简称JVM)是一种能够执行Java字节码的虚拟机。它不仅限于Java语言,对于那些编译后能符合JVM加载文件格式要求的语言,如Kotlin、Scala等...

    深入理解Java虚拟机1

    为避免这种问题,可以通过设置JVM参数如`-Xms`和`-Xmx`来限制堆内存的最小和最大值,并通过`-XX:+HeapDumpOnOutOfMemoryError`在出现内存溢出时生成堆内存快照,便于分析。 堆内存快照可以帮助我们分析内存占用情况...

    java虚拟机jvm及Tomcat中的jvm有关内存的设置与调优

    ### Java虚拟机(JVM)内存设置与调优详解 #### 引言 在现代软件开发中,Java虚拟机(JVM)作为执行Java字节码的核心组件,其性能直接影响到Java应用的运行效率与稳定性。特别是在大数据处理场景下,合理设置JVM内存...

    java虚拟机的原理!

    Java虚拟机在处理这些基本数据类型时,会提供一系列的操作码来支持这些类型的运算,例如加法操作码(`iadd`、`ladd`、`fadd`、`dadd`),分别对应于`int`、`long`、`float`和`double`类型。 #### 四、对象类型的...

Global site tag (gtag.js) - Google Analytics