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