java - 如何在 jvm 中创建超过 Integer.MAX_VALUE 的对象?

标签 java memory-management jvm heap-memory

从这里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/

相关文章:

Impala 的 Java 时间戳到 BigInt

c++ - 大数据 block 的 C++ 中的碎片 (Windows)

java - 在java中可以用静态内存分配和动态内存分配来创建对象吗?

C—内存位置的总线错误

java - JVM 垃圾收集突然占用大量 CPU

jvm - Java 虚拟机和交换空间

java - Java 1.6 上的 SIGSEGV 0xb 和 Ubuntu 上的 1.7

java - 在webdriver中,如何使用Java验证下拉字段是否显示

java - 在 Bottom Sheet 中更新 recyclerview 内容失败

java - Java groupingBy 收集器是否保留列表顺序?