2

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

4

3 回答 3

2

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

  1. 对象字段的大小。对于原语等,这很简单
  2. 所指对象的大小。每个成员对象都是一个引用,实际上并不完全包含在所讨论的对象中。例如String包含对 char 数组的引用,但该 char 数组可以在多个之间共享Strings(请参阅源substring()以了解如何 - 这称为享元模式)
  3. JVM中任何本机实现细节的大小
于 2012-08-22T15:54:52.493 回答
0

实际上,我认为您可以借助 Instrumentation 类获得对象的大小,但与C++ 中的一种,您可以在其中使用 sizeof() 函数。

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

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

于 2013-04-04T06:58:05.453 回答
0

不,它违背了语言的概念。在真正的面向对象编程语言中(而不是像 C++ 那样被破解的 OOP 支持),对象是抽象概念,而不是计算机上的位。除非您序列化对象,否则它将被视为实际对象而不是位序列。

于 2012-08-22T15:48:55.350 回答