scala - Map.empty 和 None 是否占用相同的内存?

标签 scala

如果我有一个看起来像这样的案例类:

case class User(id: String, settings: Map[String, String])

如果我这样定义它,当我实例化这个对象时会不会在内存占用方面有所不同:

case class User(id: String, settings: Map[String, String] = Map.empty[String, String])

case class User(id: String, settings: Option[Map[String, String]] = None)

所以我们比较的是 case classes 属性是空 Map 还是选项类型上的 None。

User 的实例在内存占用方面是否存在差异?

最佳答案

NoneMap.empty 都是没有字段的 objects,因此具有相同的内存消耗(在典型的 JVM 上,大约20 字节是正确的数量级)。

请注意,对于每个非空情况,建模为 Option[Map] 都会产生开销(在典型的 JVM 上,大约是 30 个字节)。因此,使用 None 代替空的 Map 不会节省内存。

至少根据我的经验,使用 Option[Map] 的唯一充分理由是与宏派生序列化之类的东西结合使用,在这种情况下,您正在建模 map 可能不会甚至在序列化表示中有一个字段。

关于scala - Map.empty 和 None 是否占用相同的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69283389/

相关文章:

java - 如何在jvm之间分发代码

scala - 为什么使用 scala 的迭代器实现 crossProduct 会返回错误的结果?

scala - Scala中的A#B是什么意思

Java <-> Scala 转换 - "value is not a member of"

scala - 检查Scala宏中的varargs类型归属

python - 使用 Intellij 和 Scala 安装和使用库

Scala:用抽象成员覆盖具体成员

scala - 使用 bool 值标记 spark 数据框中的错误行

scala - 你如何在 sbt 中编写任务?

scala - 找不到 Apache Spark Mongo-Hadoop 连接器类