如果我有一个看起来像这样的案例类:
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
的实例在内存占用方面是否存在差异?
最佳答案
None
和 Map.empty
都是没有字段的 objects
,因此具有相同的内存消耗(在典型的 JVM 上,大约20 字节是正确的数量级)。
请注意,对于每个非空情况,建模为 Option[Map]
都会产生开销(在典型的 JVM 上,大约是 30 个字节)。因此,使用 None
代替空的 Map
不会节省内存。
至少根据我的经验,使用 Option[Map]
的唯一充分理由是与宏派生序列化之类的东西结合使用,在这种情况下,您正在建模 map 可能不会甚至在序列化表示中有一个字段。
关于scala - Map.empty 和 None 是否占用相同的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69283389/