【发布时间】:2011-11-01 01:44:19
【问题描述】:
有没有办法从 Java 中的序列化对象大小(大致)估计内存对象大小
【问题讨论】:
-
[此处或多或少相似] (stackoverflow.com/questions/3983360/…)
标签: java memory serialization
有没有办法从 Java 中的序列化对象大小(大致)估计内存对象大小
【问题讨论】:
标签: java memory serialization
内存中的大小通常在可序列化大小的一半到两倍之间。最极端的例子可能是 80 字节以上的 Byte 序列化在内存中可以是 16 字节。
您可以使用分析器来告诉您一个对象使用了多少内存。另一种方法是使用基于Instrumentation.getObjectSize(object)的工具
你可能会觉得这个很有趣Getting the size of an Object
【讨论】:
length。大多数 JVM 都是 8 字节对齐的,因此您需要四舍五入到接下来的 8 个字节。
这个挑战的一个非常好的工具: https://github.com/jbellis/jamm
来自 readme.txt:
MemoryMeter 与 java.lang.instrument.Instrumentation.getObjectSize,它只声称 提供“近似”结果,但在实践中似乎可以作为 预计。
MemoryMeter 使用反射来抓取对象图以获取 measureDeep。 反射很慢:测量一百万个物体 Cassandra Memtable (即 MemoryMeter.countChildren 中的 100 万个孩子) 大约 5 秒挂钟时间。
【讨论】: