我正在调查这个,只是想知道Java是否提供任何构造来找出对象的大小?
答案 0 :(得分:2)
不幸的是没有。它相对复杂。例如如果我创建一个String
对象,我必须考虑:
String
包含对char数组的引用,但该char数组可以在多个Strings
之间共享(请参阅substring()
的来源以了解如何 - 这称为flyweight模式)< / LI>
答案 1 :(得分:0)
没有。它违背了语言的概念。在一个真正的面向对象编程语言(不是像C ++这样的黑客一起支持OOP)中,对象是抽象概念,而不是计算机上的位。除非你序列化对象,否则它被视为一个实际的对象,而不是一系列的位。
答案 2 :(得分:0)
实际上我认为你可以在Instrumentation类的帮助下获得一个对象的大小,但是这个过程有点复杂(你必须在清单文件中指定premain类,定义一个Instrumetation代理等)与使用sizeof()函数的C ++相比。
一个缺点是你获得了对象的大小,但没有获得引用对象的大小(如果有的话)。
另一种方法是,但这是基本的,让您的测试对象被序列化并在文件中写入并具有文件的大小(使用ObjectOutputStream并获得其大小)。有关此主题的进一步文档和不仅要阅读一般的Java代理和Java探测。探索JVM是一种非常有用的技术,特别是如果你想对性能(对象大小,运行线程,内存泄漏等)进行分析。