Java中的对象是否有任何内存大小限制?

我们可以拥有任何大小的Java对象而不必担心异常吗?我将使用一个类的对象,该类由ArrayList成千上万个包含HashMaps和ArrayLists以及许多其他非原始类型的其他对象组成。

谢谢

回答:

如果对象的大小超出堆大小,则会生成“内存不足”错误。

在您的情况下,总对象的大小(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

回到顶部