要增强群集中的消息传递,重要的是要在运行时了解消息的大小(我应该更喜欢处理本地消息还是远程消息).
我可以找到基于java检测估计对象内存大小的框架.我测试了classmexer,它没有接近序列化大小和sourceforge SizeOf.
在一个小的测试用例中,SizeOf错误大约10%,比序列化快10倍.(仍然瞬态完全破坏了估计,因为例如ArrayList是瞬态的,但是被序列化为数组,修补SizeOf并不容易.但我可以忍受这种情况)
另一方面,10%的误差和10%的误差似乎不太好.任何想法我怎么能做得更好?
更新:我还测试了ObjectSize(http://sourceforge.net/projects/objectsize-java).结果似乎只适合非继承对象:(
我正在计算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占用并且效率低下.
我正在考虑采用以下两种方法:
我正在寻找任何人使用这些方法的性能,效率,缩放等经验,或者如果你知道更好的方法.
PS:这是我正在构建的后台实用程序,因此大小不需要超级准确,尽管它应该是正确的.因此,我愿意以准确性换取性能
我对深度大小不感兴趣[不会计算此对象引用的对象的大小.]
我正在寻找性能比较和理解getObjectSize()如何在内部工作..所以我不会搞砸别的东西来提高性能
谢谢