gpt4 book ai didi

java - 属性字段与属性值映射

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:54:16 26 4
gpt4 key购买 nike

我有一个包含大约 10 个属性的 (java) 类,其中许多可能保持未初始化并且在对象的生命周期内未访问

因此我正在考虑使用 Map<String,Object>作为属性名 -> 属性值映射而不是很多字段,以节省资源。
现在我想知道,是否存在任何官方或非官方规则,何时以及如何决定所描述的可能性之一。在我考虑使用这样的映射之前,一个类应该有多少个属性?我应该使用它吗?

提前感谢您对此的建议/意见。

最佳答案

好吧,我假设您这样做是为了节省内存,因为显然您不会通过访问 map 而不是字段来节省 CPU 资源。那么让我们看看结果有多好:(假设没有压缩 oops 的 64 位 JVM - 这是不现实的,但不应该改变结果太多,你可以自己轻松计算)

基本上,java 中的一个字段永远不会占用超过 8 个字节(以及引用的字长)。所以这意味着你的类(class)有 10 个字段,假设所有字段都未使用,我们最多可以节省 8*10 字节 = 80 字节。

现在你想用一个 HashMap 代替它 - 这意味着我们已经用完了 8 个额外的字节。此外,HashMap 始终被初始化,因此我们得到的开销为:2 个字头 + 引用 + 3 个整数 + float + 1 个数组(2 个字开销,4 字节大小,默认情况下 16 个引用)占用 182 字节 内存。

祝贺你节省了惊人的 -110 字节!

PS:我认为哈希集的支持数组的最小可能默认值为 2,因此您可以使用它并得出大致相等的结果。但是,一旦您将对象存储在集合中,您就会从该类使用的 Wrapper 对象中获得额外的开销。所以这真的是个坏主意。

关于java - 属性字段与属性值映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9621527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com