Java中的对象是否有任何内存大小限制?
我们可以拥有任何大小的Java对象而不必担心异常吗?我将使用一个类的对象,该类由ArrayList
成千上万个包含HashMap
s和ArrayList
s以及许多其他非原始类型的其他对象组成。
谢谢
回答:
如果对象的大小超出堆大小,则会生成“内存不足”错误。
在您的情况下,总对象的大小(ArrayList中的对象+系统中其他对象)的重要性更大,因为ArrayList只是引用这些对象的大小。
下面是VM选项,你可以用它来设置堆大小按您的要求(从该java
文档):
-Xms
ñ指定内存分配池的初始大小(以字节为单位)。此值必须是大于1MB的1024的倍数。追加字母k或K表示千字节,或者追加m或M表示兆字节。默认值为2MB。例子:
-Xms6291456
-Xms6144k
-Xms6m
-Xmx
ñ指定内存分配池的最大大小(以字节为单位)。此值必须是大于2
MB的1024的倍数。追加字母k或K表示千字节,或者追加m或M表示兆字节。默认值为64MB。例子:
-Xmx83886080
-Xmx81920k
-Xmx80m
从VM
Spec检查堆信息
Java虚拟机具有一个在所有Java虚拟机线程之间共享的堆。堆是运行时数据区,从中分配了所有类实例和数组的内存。堆是在虚拟机启动时创建的。>自动存储管理系统(称为垃圾收集器)可以回收对象的堆存储;对象永远不会>显式释放。Java虚拟机不假定特定类型的自动>存储管理系统,并且可以根据实现者的系统要求选择存储管理技术。堆的大小可以是固定的,也可以根据计算的要求进行扩展,如果不需要,则可以缩小堆。堆的内存不必是连续的。
Java虚拟机实现可以为程序员或用户提供对堆的初始大小的控制,并且,如果可以动态扩展或收缩堆,则可以控制最大和最小堆大小。5
以下异常情况与堆相关联:
如果计算所需的堆多于自动存储管理系统所能提供的堆,则Java虚拟机将抛出OutOfMemoryError。
以上是 Java中的对象是否有任何内存大小限制? 的全部内容, 来源链接: utcz.com/qa/407825.html