gpt4 book ai didi

scala - Scala元组内存开销

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

Tuple [Int,Int]的额外存储成本是多少? (1,2)超过两个没有元组的整数?

最佳答案

每个对象的JVM开销通常为16到24个字节(分别为32位和64位,尽管压缩指针可使后者更小)。 Tuple2专门用于Int,这意味着它将值存储在字段中,因此对于两个整数,您有8个字节,而对于(1,2),则为8 + 16 = 24或8 + 24 = 32。如果您使用类似的非专用集合(或将Tuple2用于非专用集合,例如Char),则需要指向对象的指针,并且可能需要取决于是否可以预分配对象的对象(任意整数,否;任意字节,是;任意字符,也许)。如果是,则只需要指针,它是8 + 16 = 24或16 + 24 = 40字节;如果否,则需要三个对象,因此分别为16 + 8 + 2 *(16 + 4)= 64和24 + 16 + 2 *(24 + 4)= 96。

底线:与基本类型相比,对象使用更多的内存,通常为3-4x,但有时超过10x。如果内存不足,请尽可能多地打包到阵列中。例如:

不利于内存使用:

val a = (1 to 10000).map(x => (x,x.toString.length)).toArray


有利于内存使用:

val b = ((1 to 10000).toArray, (1 to 10000).map(_.toString.length).toArray)


如果您真的很紧的内存,那么可以编写迭代器和其他包装器,使您可以将事物索引为元组数组而不是数组元组。这有点痛苦,但是如果您真的内存不足,那是值得的。

关于scala - Scala元组内存开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6916843/

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