gpt4 book ai didi

performance - 如何在 Scala 中近似数据结构的大小?

转载 作者:行者123 更新时间:2023-12-04 14:32:03 26 4
gpt4 key购买 nike

我有一个查询返回大约 600 万行,这太大了,无法在内存中一次处理。

每个查询都返回一个 Tuple3[String, Int, java.sql.Timestamp]。我知道字符串永远不会超过大约 20 个字符,UTF8。

我怎样才能算出这些元组之一的最大大小,更一般地说,我怎样才能近似这样的scala数据结构的大小?

我正在使用的机器上有 6Gb。但是,正在使用 scala-query 从数据库中将数据读取到 Scala 的列表中。

最佳答案

Scala 对象遵循与 Java 对象大致相同的规则,因此有关这些对象的任何信息都是准确的。 Here is one source ,这似乎至少适用于 32 位 JVM。 (64 位 JVM 每个指针使用 8 个字节,这通常会产生 4 个字节的额外开销加上每个指针 4 个字节的开销——但如果 JVM 使用压缩指针,则可能会更少,我认为它现在默认使用压缩指针。)

我将假设一台没有压缩指针的 64 位机器(最坏的情况);然后是 Tuple3有两个指针(16 字节)加上一个 Int (4 个字节)加上对象开销(~12 个字节)四舍五入到最接近的 8 或 32 个字节,加上一个额外的对象(8 个字节)作为 Int 的非专业版本的 stub . (遗憾的是,如果您在元组中使用原语,它们会比使用包装版本占用更多空间。)。 String是 32 个字节,IIRC,加上数据的数组,每个字符 16 加 2。 java.sql.Timestamp需要存储几个 Long s(我认为是),所以这是 32 个字节。总而言之,它大约为 120 个字节加上每个字符两个,在 ~20 个字符处是 ~160 个字节。

或者,参见 this answer一种直接测量物体大小的方法。当我以这种方式测量时,我得到了 160 个字节(并且我上面的估计已经使用这些数据进行了更正,因此它匹配;我之前有几个小错误)。

关于performance - 如何在 Scala 中近似数据结构的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11209101/

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