Windows上每个Java进程的最大内存量? [英] Maximum amount of memory per Java process on Windows?

查看:189
本文介绍了Windows上每个Java进程的最大内存量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用 -Xmx 在Java进程的32位Windows上可以分配的最大堆大小是多少?

What is the maximum heap size that you can allocate on 32-bit Windows for a Java process using -Xmx?

我问,因为我想在 OpenMap 和原始二进制浮动文件中使用ETOPO1数据约为910  MB。

I'm asking because I want to use the ETOPO1 data in OpenMap and the raw binary float file is about 910 MB.

推荐答案

没有什么比回答你的问题的实证实验更好的了。
我编写了一个Java程序并在指定XMX标志的同时运行它(也使用XMS = XMX来强制JVM预先分配所有内存)。
为了进一步防止JVM优化,我主动分配X个10MB对象。
我在许多JVM上运行了一些测试,增加了XMX值,增加了分配的MB数量,在使用Sun和IBM JVM的不同32位操作系统上,这里是结果摘要:

There's nothing better than an empirical experiment to answer your question. I've wrote a Java program and run it while specifying the XMX flag (also used XMS=XMX to force the JVM pre-allocate all of the memory). To further protect against JVM optimizations, I've actively allocate X number of 10MB objects. I run a number of test on a number of JVMs increasing the XMX value together with increasing the number of MB allocated, on a different 32bit operating systems using both Sun and IBM JVMs, here's a summary of the results:

操作系统:Windows XP SP2,JVM:Sun 1.6.0_02,最大堆大小:1470 MB

操作系统:Windows XP SP2,JVM:IBM 1.5,最大堆大小:1810 MB

操作系统:Windows Server 2003 SE,JVM:IBM 1.5,最大堆大小:1850 MB

操作系统:Linux 2.6,JVM:IBM 1.5,最大堆大小:2750 MB

OS:Windows XP SP2, JVM: Sun 1.6.0_02, Max heap size: 1470 MB
OS: Windows XP SP2, JVM: IBM 1.5, Max heap size: 1810 MB
OS: Windows Server 2003 SE, JVM: IBM 1.5, Max heap size: 1850 MB
OS: Linux 2.6, JVM: IBM 1.5, Max heap size: 2750 MB

以下是详细的运行尝试以及分配类助手源代码:

Here's the detailed run attempts together with the allocation class helper source code:

WinXP SP2 ,SUN JVM:

WinXP SP2, SUN JVM:


C:>java -version
java version "1.6.0_02"
Java(TM) SE Runtime Environment (build 1.6.0_02-b06)
Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode)

java -Xms1470m -Xmx1470m Class1 142
.. 。
即将创建对象141
对象141已创建

java -Xms1470m -Xmx1470m Class1 142 ... about to create object 141 object 141 created

C:> java -Xms1480m -Xmx1480 m Class1 145
初始化VM
时出错无法为对象堆保留足够的空间
无法创建Java虚拟机。

C:>java -Xms1480m -Xmx1480m Class1 145 Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.


WinXP SP2,IBM JVM

WinXP SP2, IBM JVM

 
C:>c:\ibm\jdk\bin\java.exe -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pwi32devifx-20070323 (if
ix 117674: SR4 + 116644 + 114941 + 116110 + 114881))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223ifx-2007
0323 (JIT enabled)
J9VM - 20070322_12058_lHdSMR
JIT  - 20070109_1805ifx3_r8
GC   - WASIFIX_2007)
JCL  - 20070131

c:\ibm\jdk\bin\java.exe -Xms1810m -Xmx1810m Class1 178
...
即将创建对象177
对象177创建

c:\ibm\jdk\bin\java.exe -Xms1810m -Xmx1810m Class1 178 ... about to create object 177 object 177 created

C:> c:\ibm \ jdk\bin\java.exe -Xms1820m -Xmx1820m Class1 179
JVMJ9VM015W库j9gc23的初始化错误(2):无法实例化
ap。 1820M请求
无法创建Java虚拟机。

C:>c:\ibm\jdk\bin\java.exe -Xms1820m -Xmx1820m Class1 179 JVMJ9VM015W Initialization error for library j9gc23(2): Failed to instantiate he ap. 1820M requested Could not create the Java virtual machine.

Win2003 SE,IBM JVM

Win2003 SE, IBM JVM


C:>"C:\IBM\java" -Xms1850m -Xmx1850m Class1
sleeping for 5 seconds.
Done.

C:>C:\IBM \ java-Xms1880m -Xmx1880m
Class1
JVMJ9VM015W初始化错误对于库j9gc23(2):无法实例化他
ap。 1880M请求
无法创建Java虚拟机。

C:>"C:\IBM\java" -Xms1880m -Xmx1880m Class1 JVMJ9VM015W Initialization error for library j9gc23(2): Failed to instantiate he ap. 1880M requested Could not create the Java virtual machine.


Linux 2.6,IBM JVM

Linux 2.6, IBM JVM


[root@myMachine ~]# /opt/ibm/java2-i386-50/bin/java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pxi32dev-20060511 (SR2))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223-20060504 (JIT enabled)
J9VM - 20060501_06428_lHdSMR
JIT  - 20060428_1800_r8
GC   - 20060501_AA)
JCL  - 20060511a

/ opt / ibm / java2-i386-50 / bin / java -Xms2750m -Xmx2750m Class1 270

/opt/ibm/java2-i386-50/bin/java -Xms2750m -Xmx2750m Class1 270

[root @ myMachine~]#/ opt / ibm / java2-i386-50 / bin / java -Xms2800m -Xmx2800m Class1 270
JVMJ9VM015W库j9gc23的初始化错误(2):无法实例化堆。 2800M请求
无法创建Java虚拟机。

[root@myMachine ~]# /opt/ibm/java2-i386-50/bin/java -Xms2800m -Xmx2800m Class1 270 JVMJ9VM015W Initialization error for library j9gc23(2): Failed to instantiate heap. 2800M requested Could not create the Java virtual machine.

以下是代码:


import java.util.StringTokenizer;


public class Class1 {

        public Class1() {}

        private class BigObject {
                byte _myArr[];
                public BigObject() {
                        _myArr = new byte[10000000];
                }
        }
    public static void main(String[] args) {
                (new Class1()).perform(Integer.parseInt(args[0]));
        }
        public void perform(int numOfObjects) {
                System.out.println("creating 10 MB arrays.");
                BigObject arr[]  = new BigObject[numOfObjects];
                for (int i=0;i <numOfObjects; i++) {
                        System.out.println("about to create object "+i);
                        arr[i] = new BigObject();
                        System.out.println("object "+i+" created");
                }
                System.out.println("sleeping for 5 seconds.");
                try {
                Thread.sleep(5000);
                }catch (Exception e) {e.printStackTrace();}
                System.out.println("Done.");
    }

}

这篇关于Windows上每个Java进程的最大内存量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆