Java pointer/reference 内存开销

Java pointer/reference memory cost

我有一个具有 2 个属性的 Java 对象。此对象属性之一是字符串。实际上,对象的每个实例都将具有相同的值(或 2 个值之一)

例如:

public record Car (String modelId, String brand) {}

如果我有数百万个这样的对象,每个对象都有不同的 modelId,但是 brand = FordVolkswagen,[=41 如何=] 在内存方面管理 brand 属性?

我认为(?)FordVolkswagen 字符串对象只有一个实例,每个 Car 都有一个指向这些字符串的指针或引用 - 是这个正确吗?

我的主要问题:鉴于我们只有指向品牌 属性 的指针,删除 brand [=43= 是否节省了内存? ] 相当小?也就是说,如果我从 Car 中删除 String brand 属性,尽管有数百万个 Car 实例,但我不会在内存方面节省太多?

奖励点:从内存堆栈中删除(?100万)个指针可以节省多少内存?

您可以使用string interning来确保每个重复的字符串指向相同的内存。

否则,如果您创建 1,000,000 个字符串并将它们设置为值“Ford”,则您已经在内存中创建了 1,000,000 个组成“Ford”的字节副本。