当前位置: 首页 > 面试题库 >

Java中的对象引用有多大?它包含什么信息?

关学
2023-03-14
问题内容

作为程序员,我认为它们看起来像“地址为1a234552的java.lang.Object”或类似sin

Object s = "hello";

它是否正确?因此,所有参考均固定大小吗?


问题答案:

尽管在许多VM上,引用的大小是本机指针大小(即32位JVM为32位,而64位JVM为64位),但不能保证-特别是HotSpot现在或不久将支持“ “压缩的糟糕”是在64位JVM中的32位引用。(这并不意味着每个参考都经过压缩-请阅读链接的文章以获取更多信息,并且还有很多与此相关的博客文章。)

在回应另一条评论时,请注意,引用本身通常只是解决对象本身的一种方式。无论它是不是直接的内存指针,它的目标都是获取对象的数据。基本上,这才是真正重要的。如果有一些“备用”位(例如,它是一个64位引用,而你并不需要全部宽度来表示对象的位置),则VM可以将该数据用于其他信息,例如其类型,这可能允许一些优化。(有关更多详细信息,请参见Tom的评论。)

对象本身包含类型信息(可能以对的实例的引用Class或类似的形式-我不太了解),以及在到达用户之前在标头中包含其他必要的“内容”对象的数据。



 类似资料:
  • 问题内容: 我有类GUI,因此可以创建如下对象: 和像这样的参考变量: 现在,据我所知,g2是引用GUI类的引用变量,而g1是GUI类的对象。g1和g2有什么区别?我可以将GUI类的属性与对象一起使用,但是g2的可能用法是什么? 问题答案: 参考是名称。对象就是东西。您可以为事物使用不同的名称,即使对于实际上不存在的事物也可以使用不同的名称。 您可以声明名称,而无需实际给它们任何“真实的”含义,例

  • 问题内容: 我可以从Google那里收集到的是: Hibernate使用代理对象来实现延迟加载。当我们请求从数据库中加载对象,并且获取的对象具有对另一个具体对象的引用时,Hibernate返回一个代理而不是具体的关联对象。 Hibernate使用字节码检测(由Javassist提供)创建代理对象。Hibernate在运行时使用代码生成库创建我们的实体类的子类,并将实际对象替换为新创建的代理。 那么

  • 我能从谷歌得到的信息是: > Hibernate使用代理对象实现延迟加载。当我们请求从数据库加载对象,并且获取的对象引用了另一个具体对象时,Hibernate会返回一个代理,而不是具体的关联对象。 Hibernate使用字节码检测(由javhelp提供)创建代理对象。Hibernate在运行时使用代码生成库创建我们实体类的子类,并用新创建的代理替换实际对象。 那么,代理对象到底包含什么? 它是否包

  • 我试图打印包含,但是,HashSet没有检测到整数[]值。这和它被引用有关系吗?如果我不想将实际的整数[]对象传递给方法的参数,我如何克服这个问题?

  • 上面的代码命名为“节点”,下面的代码命名为“测试” 我们都知道这一点。在java中,引用实例字段,在测试代码中,我们首先创建一个新的对象节点,在节点代码中,我们还创建了许多带有“new”的对象,我的问题是,在这种情况下,“this.and this”指的是什么?

  • 问题内容: 如问题所述,在Java编程语言中,有多少内存用于引用对象? 请,如果您有可信赖的来源更好。 非常感谢! 问题答案: 语言或JVM规范未指定。但是,通常公认的是,任何明智的实现在32位计算机上都是4字节,而在64位计算机上则是4到8字节(取决于压缩指针设置等)。