计算Java对象的字节大小

cod*_*ver 11 java serialization instrumentation

我正在计算java对象[hashmap]的大小[使用的内存].它包含[在运行时]不同数据类型的元素,因此[no-of-elem*size-of-element]并不是一种好方法.现在的代码是通过一系列的

if (x)
  do something
else if (primitives)
  lookup size and calculate
Run Code Online (Sandbox Code Playgroud)

然而,这个过程是CPU占用并且效率低下.

我正在考虑采用以下两种方法:

  1. 将对象序列化为缓冲区并获取大小.
  2. 查看java.lang.instrument以获取大小

我正在寻找任何人使用这些方法的性能,效率,缩放等经验,或者如果你知道更好的方法.

PS:这是我正在构建的后台实用程序,因此大小不需要超级准确,尽管它应该是正确的.因此,我愿意以准确性换取性能

我对深度大小不感兴趣[不会计算此对象引用的对象的大小.]

我正在寻找性能比较和理解getObjectSize()如何在内部工作..所以我不会搞砸别的东西来提高性能

谢谢

Mih*_*ria 4

使用Instrumentation 包的getObjectSize()方法。

在这里查看实施细节: