Không có gì tốt hơn thử nghiệm thực nghiệm để trả lời câu hỏi của bạn. Tôi đã viết một chương trình Java và chạy nó trong khi chỉ định cờ XMX (cũng được sử dụng XMS = XMX để buộc JVM phân bổ trước tất cả bộ nhớ). Để bảo vệ hơn nữa chống lại các tối ưu hóa JVM, tôi đã chủ động phân bổ số lượng X đối tượng 10MB. Tôi chạy một số thử nghiệm trên một số JVM tăng giá trị XMX cùng với việc tăng số lượng MB được phân bổ, trên một hệ điều hành 32 bit khác nhau sử dụng cả Sun và IBM JVM, dưới đây là tóm tắt kết quả:
OS : Windows XP SP2, JVM: Sun 1.6.0_02, Kích thước tối đa heap: 1470 MB
Hệ điều hành: Windows XP SP2, JVM: IBM 1.5, Kích thước heap tối đa: 1810 MB
Hệ điều hành: Windows Server 2003 SE, JVM: IBM 1.5 , Kích thước heap tối đa: 1850 MB
Hệ điều hành: Linux 2.6, JVM: IBM 1.5, Kích thước heap tối đa: 2750 MB
Dưới đây là các nỗ lực chạy chi tiết cùng với nguồn cấp hỗ trợ cấp phối hợp tác de:
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
...
about to create object 141
object 141 created
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
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
...
about to create object 177
object 177 created
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
C:>"C:\IBM\java" -Xms1850m -Xmx1850m Class1
sleeping for 5 seconds.
Done.
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
[[email protected] ~]# /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
[[email protected] ~]# /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.
Dưới đây là các mã:
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.");
}
}
Có vẻ giống như một bản sao của http://stackoverflow.com/questions/171205/java-maximum-memory-on-windows-xp. –
Tôi nên ngừng đếm trên tìm kiếm người hỏi câu hỏi. –