java.util.Date对象使用多少字节的内存?

Mic*_*wan 16 java memory date

我需要存储大量的日期(可能足够大,以至于所使用的堆空间量是一个问题所以请不要过早优化的讲座),我想知道使用某种原始表示是否有意义java.util.Date(或其他一些现有的Date类).我知道我可以做一些分析来尝试一下,但有没有人知道单个Date对象使用的内存有多少字节?

Dun*_*nes 16

我的直觉反应是Date的内存开销非常小.检查源代码似乎该类只包含一个实例字段(一个长的称为毫秒).这意味着日期对象的大小是long的大小加上Object实例的大小 - 也就是说,非常小.

然后我发现这个代码创建了数千个对象来确定对象的大小.它说大小java.util.Date是32个字节.相比之下,只需将日期存储为长(这是它在内部执行的操作) - 长为8个字节,因此为了方便拥有日期对象,您必须支付四倍.

但是,创建对象的开销不是很高.因此,如果您真的担心空间,那么将日期存储为long并在需要时创建Date对象.

  • @Peter确实,只有你拥有很多这些对象才真正重要,但我非常明确地说我*拥有很多这些对象.在我的应用程序中,我们已经遇到过许多实例,开发人员使用了你描述的"内存便宜"的理念,只是让它回过头来咬我们.此外,客户可能希望使用我们的软件而无需购买新计算机(并且他们可能具有限制其潜在堆大小的32位操作系统). (2认同)

rap*_*ura 9

使用原始长?

它不是一个对象,因此空间较少,日期可以表示为长值.然后,当您想要存储日期并使用更少的内存时,在Date和long之间来回转换.