当前位置: 首页 > 面试题库 >

Windows上每个Java进程的最大内存量?

鲜于仰岳
2023-03-14
问题内容

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

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


问题答案:

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

操作系统: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

这是详细的运行尝试以及分配类帮助程序源代码:

WinXP SP2,SUN JVM:

C:> java-版本
Java版本“ 1.6.0_02”
Java(TM)SE运行时环境(内部版本1.6.0_02-b06)
Java HotSpot(TM)客户端VM(内部版本1.6.0_02-b06,混合模式)



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





C:> java -Xms1480m -Xmx1480m Class1 145
VM初始化期间发生错误
无法为对象堆保留足够的空间
无法创建Java虚拟机。

WinXP SP2,IBM JVM

C:> c:\ ibm \ jdk \ bin \ java.exe -version
Java版本“ 1.5.0”
Java™2 ​​Runtime Environment,标准版(内部版本pwi32devifx-20070323(如果
ix 117674:SR4 + 116644 + 114941 + 116110 + 114881))
IBM J9 VM(内部版本2.3,J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223ifx-2007
0323(已启用JIT)
J9VM-20070322_12058_lHdSMR
准时-20070109_1805ifx3_r8
GC-WASIFIX_2007)
JCL-20070131



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





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

Win2003 SE,IBM JVM

C:>“ C:\ IBM \ java” -Xms1850m -Xmx1850m类别1
睡5秒钟。
做完了



C:>“ C:\ IBM \ java” -Xms1880m -Xmx1880m
 1类
JVMJ9VM015W库j9gc23(2)的初始化错误:无法实例化他
ap。要求1880M
无法创建Java虚拟机。

Linux 2.6,IBM JVM

[root @ myMachine〜]#/ opt / ibm / java2-i386-50 / bin / java -version
Java版本“ 1.5.0”
Java™2 ​​Runtime Environment,标准版(内部版本pxi32dev-20060511(SR2))
IBM J9 VM(内部版本2.3,J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223-20060504(已启用JIT)
J9VM-20060501_06428_lHdSMR
准时-20060428_1800_r8
GC-20060501_AA)
JCL-20060511a



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





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

这是代码:

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.");
    }

}


 类似资料:
  • 问题内容: 我一直能够为在32位Windows XP(Java 1.4、1.5和1.6)上运行的Java SE分配1400 MB的内存。 今天,我在使用Java 1.5_16和1.6.0_07的新Windows XP计算机上尝试了相同的选项,并收到错误消息: 通过反复试验,似乎1200兆字节是我可以在此计算机上分配的最大内存。 有什么想法为什么一台机器允许1400,而另一台只能允许1200? 编辑

  • 问题内容: Linux下一个进程可以创建的最大线程数是多少? 如何(如果可能)修改该值? 问题答案: Linux的每个进程限制没有单独的线程,只是系统上的进程总数的限制(线程本质上只是Linux上具有共享地址空间的进程),您可以这样查看: 默认值为内存页数/ 4。您可以像这样增加: 单个用户可以创建的进程(以及线程)的数量也有限制,有关这些限制的详细信息,请参见。

  • PS:有时我会从java代码执行shell脚本。会不会导致这类问题?

  • 问题内容: 当我们在程序中启动线程时,是否有任何方法可以为每个线程分配内存限制? 我的意思是我们为新流程分配了以下内容: 我们可以用Java线程做任何类似的事情吗? 基本上,我的每个线程都将执行某项任务,我希望对每个线程的内存使用量设置一些最大限制。 问题答案: 我们可以用Java线程做任何类似的事情吗? 不能。进程中的线程通常用于访问进程(在本例中为JVM)中的共享主内存。 基本上,我的每个线程

  • 问题内容: 在64位平台上,一个人可以为java分配的最大堆空间是多少?无限吗? 问题答案: 理论上是2 64,但是可能会有限制(显然) 根据此常见问题解答,它仅受本地系统上的内存和交换空间的限制: 在64位VM上,您具有64位可寻址性,因此可产生的最大Java堆大小仅受系统提供的物理内存和交换空间的数量限制。 另请参见为什么使用32位JVM无法获得更大的堆? 另外请记住,您需要通过命令行设置最大

  • 我使用的计算机规格如下:OS-Windows7 professional Installed Memory(RAM):8Gb系统类型:64位操作系统JVM:Java version 8 update 91(jre1.8.0_91)64位版本 Java版本"1.8.0_91"Java(TM)SE运行时环境(内部版本1.8.0_91-b15)JavaHotSpot(TM)64位服务器VM(内部版本25