gpt4 book ai didi

java - 在 Java 中检索大对象的选择属性集合的一种更好的执行方式

转载 作者:行者123 更新时间:2023-11-29 08:00:05 25 4
gpt4 key购买 nike

有没有一种方法可以让我迭代一个集合并只检索属性的一个子集而不加载/卸载每个要缓存的完整对象?因为当我只需要一些属性时加载/卸载整个(可能是大的)对象似乎是一种浪费,尤其是在对象很大的情况下。加载这些不必要的数据时可能会导致不必要的缓存冲突,对吧?

当我想“加载到缓存”时,我的意思是通过处理器“处理”该对象。所以会有 ex: 10 个属性的对象。在迭代循环中,我只使用其中的一个。在这样的场景下,我认为把其他9个属性全部从内存加载到处理器是一种浪费。有没有只提取属性而不加载完整对象的解决方案?

此外,Google 的 Guava 之类的东西是否在内部解决了这个问题?

谢谢!

最佳答案

它通常不是第一个要查看的地方,但您遇到缓存共享问题也不是不可能。如果您真的确信(通过实际分析或硬件计数器分析)这是一个值得解决的瓶颈,您可能会考虑更改数据结构以使用并行原语数组(类似于某些数据库架构中基于列的数据库存储) .例如一个“列”作为 float[],另一个作为 short[],第三个作为 String[],全部由相同的标识符。此结构允许您“查询”各个列,而无需将当前不需要的任何列加载到缓存中。

我有一些低级算法代码,它们可以真正受益于 C 的 struct。我对各种替代方案进行了一些微基准测试,发现并行数组是我的算法最有效的选择(可能适用也可能不适用于您自己的算法)。

请注意,与在 java.util 集合中使用对象相比,并行数组结构的维护和变更要复杂得多。所以我要重申 - 只有在您确信 yield 是值得付出痛苦之后,我才会采用这种方法。

关于java - 在 Java 中检索大对象的选择属性集合的一种更好的执行方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14936120/

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