Java对象的空属性会占用内存吗?

6

我正在连接到一个发送多种不同JSON对象的网络服务。我计划使用GSON库将其转换为POJOs,而不是使用Java的JSONObject。我不想为每个可能的JSON服务响应创建大量类(每个类只处理一种情况),而是想要一个通用的Java对象来保存所有可能性:

public class GenericJSONResponse{
    public long objectKey;
    public GenericJSONResponse subObject1;
    public String description;
    // ...
}

我认为这是一个好方法,因为由服务器发送的属性变化非常大。所有服务器响应仅包括可能的GenericJSONResponse属性的子集。如果未填充属性会占用内存吗,即使它们为空?我的通用对象将具有许多未使用的属性,我不希望它们占用宝贵的内存。


所有的引用都占用空间。 - Sotirios Delimanolis
只有对象的引用可以为 null,而且它们会占用一些内存,取决于 JVM 的位数(32 位 vs 64 位),通常是 4 或 8 字节。 - Katona
3个回答

7

类中每个引用类型的字段在每个实例中占据一个指针大小(32位或64位)的内存块。

这段内存用于存储对该字段值的引用,该引用可以是对现有对象的引用或null引用。


2
这并不适用于原始字段,一个 byte 只占用 1 个字节。 - Katona

1
如果您不初始化引用,那么只会使用存储引用所需的内存量。
如果您创建一个新对象并将其分配给引用,则还将使用新对象的内存,并使用引用所需的内存。
如果您只是将现有对象分配给现有引用,则不需要进行新的内存分配。

1

Null只是一个引用可以拥有的值。在32位系统上它是4个字节,在64位系统上是8个字节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接