用于返回java中自定义对象大小的Helper函数

用于返回java中自定义对象大小的Helper函数,java,Java,这是一个采访问题: 有一个自定义PERSON对象,它具有一些属性,如名称、年龄、性别等。编写一个通用函数,可以返回此对象的大小。它不应该使用Java的任何直接API来获取对象的大小。此对象可以有int、float、char或任何自定义类型,也可以是address。在java中,可以说对象的大小非常接近其成员大小之和(静态成员除外) 注意,如果您使用的是java8,那么原语包装器有一个字段Bytespublicstatic,它以字节为单位表示原语的大小 资料来源: 如果您不使用Java8,可以使用

这是一个采访问题:
有一个自定义PERSON对象,它具有一些属性,如名称、年龄、性别等。编写一个通用函数,可以返回此对象的大小。它不应该使用Java的任何直接API来获取对象的大小。此对象可以有int、float、char或任何自定义类型,也可以是address。

在java中,可以说对象的大小非常接近其成员大小之和(静态成员除外)

注意,如果您使用的是java8,那么原语包装器有一个字段
Bytes
publicstatic,它以字节为单位表示原语的大小

资料来源:

如果您不使用Java8,可以使用其中一些:

  • anObject.getClass().isPrimitive()
  • anObject.getClass().getFields()
  • 递归

您还应该注意字节对齐,即在8位段上放置7字节长的元素,但这取决于您的JVM,更像是一个硬件问题。

返回类的所有大小之和如何?这不是一个好问题(检查),但我实际上对答案感兴趣。我真正不明白的是“不应该使用Java的任何直接API”的确切含义。@NeerajJain我相信他不能使用那个。这可能就是他所说的“不使用任何直接API”的意思。我觉得这个问题有点像一个陷阱。当然,您可以将所有基本体成员的大小相加;记住要考虑数组大小。但是成员对象呢?如果
Person
扩展了另一个添加其他成员的类,该怎么办?而且,所有这些都不是动态的。另外,仅仅因为我们知道一个
int
在Java中是32位的,并不能保证JVM/OS实际上会使用32位来存储它。而且,
instanceOf()
不能直接用于基本类型。有这么多陷阱,那么多的事情要考虑…我不确定这里是否有一个干净的解决方案。