Java是否提供任何构造来查找对象的大小?

时间:2012-08-22 15:48:12

标签: java object

我正在调查这个,只是想知道Java是否提供任何构造来找出对象的大小?

3 个答案:

答案 0 :(得分:2)

不幸的是没有。它相对复杂。例如如果我创建一个String对象,我必须考虑:

  1. 对象字段的大小。对于简单的原语等
  2. 所指对象的大小。每个成员对象都是引用,并且实际上并不包含在所讨论的对象中。例如String包含对char数组的引用,但该char数组可以在多个Strings之间共享(请参阅substring()的来源以了解如何 - 这称为flyweight模式)< / LI>
  3. JVM中本机实现详细信息的大小

答案 1 :(得分:0)

没有。它违背了语言的概念。在一个真正的面向对象编程语言(不是像C ++这样的黑客一起支持OOP)中,对象是抽象概念,而不是计算机上的位。除非你序列化对象,否则它被视为一个实际的对象,而不是一系列的位。

答案 2 :(得分:0)

实际上我认为你可以在Instrumentation类的帮助下获得一个对象的大小,但是这个过程有点复杂(你必须在清单文件中指定premain类,定义一个Instrumetation代理等)与使用sizeof()函数的C ++相比。

一个缺点是你获得了对象的大小,但没有获得引用对象的大小(如果有的话)。

另一种方法是,但这是基本的,让您的测试对象被序列化并在文件中写入并具有文件的大小(使用ObjectOutputStream并获得其大小)。有关此主题的进一步文档和不仅要阅读一般的Java代理和Java探测。探索JVM是一种非常有用的技术,特别是如果你想对性能(对象大小,运行线程,内存泄漏等)进行分析。