从这里discussion我需要编写一个程序来知道问题的答案:“如果对象的数量多于 int 的最大值,那么 jvm 将什么分配为对象的地址?”,
在 eclipse.ini 中进行以下设置
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20131025-1931
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms6144m
-Xmx6144m
和下面的程序,
class SubClass {
int x = 4;
int getX(){
return x;
}
}
public class Dummy2 {
public static void main(String[] args){
SubClass obj[] = null;
obj = new SubClass[Integer.MAX_VALUE];
for(int i = 0; i < Integer.MAX_VALUE; i++){
obj[i] = new SubClass();
}
SubClass objRef1 = new SubClass();
System.out.println(objRef1);
System.out.println(objRef1.hashCode());
SubClass objRef2 = new SubClass();
System.out.println(objRef2);
System.out.println(objRef2.hashCode());
}
}
出现错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我的目标是查看对象地址的值和为最后两个对象生成的哈希码。
我使用在 64 位 Windows 7 操作系统上运行的 64 位 jvm,它为每个 native 用户级进程提供 8TB 的虚拟空间。硬件有8GB RAM芯片。
请帮帮我!!
最佳答案
这里有很多误解。
- Object.hashCode() 是一个随机生成的数字,存储在对象的 header 中,并且不会随着对象移动而改变。
- Windows 不允许 JVM 使用虚拟内存,您不能创建大于主内存的 JVM 堆。
- 您需要至少 20 GB 的 JVM 内存来存储 20 亿个元素。
- 一个数组不能有超过 Integer.MAX_VALUE 个元素,但你可以有一个数组的数组(或数组的数组)
My goal is to see the value of object's internal address and the hashcode generated for last two objects.
它们是随机的,因此它们与第一个元素之间没有区别。
关于java - 如何在 jvm 中创建超过 Integer.MAX_VALUE 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27659757/