Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java堆中最大的对象大小_Java - Fatal编程技术网

Java堆中最大的对象大小

Java堆中最大的对象大小,java,Java,如果我设置最大Java堆大小-Xmx512m,那么单个对象可能的最大大小是多少 假设我的应用程序只有一个类,而我正创建一个对象 那个物体有大概的尺寸限制吗 我的班级看起来有点像下面的班级: public class BigSingleObj { //conf will contain thousand of String. private Map<String, String> conf = new HashMap<String, String>();

如果我设置最大Java堆大小
-Xmx512m
,那么单个对象可能的最大大小是多少

假设我的应用程序只有一个类,而我正创建一个对象

那个物体有大概的尺寸限制吗

我的班级看起来有点像下面的班级:

public class BigSingleObj {
    //conf will contain thousand of String.
    private Map<String, String> conf = new HashMap<String, String>();
    public String getConf(String key) {
        return conf.get(key);
    }
}
公共类BigSingleObj{
//conf将包含数千个字符串。
私有映射conf=newhashmap();
公共字符串getConf(字符串键){
返回conf.get(key);
}
}
注意


正如我提到的JVM堆大小,我要求回答一些定量问题。

这取决于您使用的JRE。是否使用x64-对象将占用更多空间

您可以使用来计算对象的大小


这可以让您知道它需要多少空间。

Java堆是系统中对象大小的限制。 检查此链接:

理论上,您能够创建的最大Java对象(如果您有足够大的堆)将是一个
长[]
,包含231-1个元素。这是16Gb

但是,对于给定的堆大小,您能够创建的最大对象取决于平台。JVM的堆被分割成两个或多个“空间”,任何给定的对象都必须放在一个空间中。接近整个堆大小的对象是不可能的

空间的默认大小是由内存管理器计算的,我从来没有遇到过预测大小的简单公式

如果你真的想要一个定量的估计,那么你最好的办法就是通过实验来测量它。编写一个简单的程序,连续分配更大的数组,直到得到OOME。但是请注意,您得到的答案将取决于您的VM版本和您使用的JVM命令行选项


假设我的应用程序只有一个类,而我正创建一个对象

您的
BigSingleObj
类实际上根本没有分配大型对象。HashMap一开始很小,随着条目的添加,它会自动增长

此外,
HashMap
对象实际上由许多对象组成。其中最大的将是散列数组,但
HashMap
的总大小将是该数组大小的5倍或更多。然后需要添加键和值所占用的空间。。。这取决于字符串的大小


所有这些都意味着,最大的可分配对象的大小并不是一个有用的预测值,它无法预测您可以在big
HashMap
中存储多少条目

检查此链接:是否有任何来源支持您的答案?第1段:JLS和JVM。第2段:关于Java垃圾收集的各种Oracle文档。第4段:JavadocforHashMap(和源代码)。第5段:典型JVM对象表示的源代码+背景知识。