java - JVM如何在运行时知道对象的类

标签 java jvm

jvm如何在运行时知道一个对象是哪个类的实例。我知道我们可以使用 getClass 方法来获取类名,但是 getClass 方法是如何工作的呢? 谢谢, 普拉文。

最佳答案

答案?魔法!

不,说真的,它是实现定义的,并且 JVM 的实现不需要使用单一的简单技术,例如将类作为引用存储在实例数据中常量偏移量的字段中。它所需要做的就是确保 getClass 方法可观察到如记录的那样工作。例如,使用 escape analysis ,JVM 可能会在堆上静态分配一个实例,因为它知道该实例的生命周期不会超过堆栈帧。在这种情况下,它可能会选择将 getClass() 调用转换为直接加载 Class 实例,而不是根本调用方法!类似地,由于 getClass() 在逻辑上是一个虚方法(我知道它是最终的,但它的返回值在任何给定类加载器的类的所有实例中都是常量,但对于每个不同的类都不同,就好像它是一个返回常量值的虚拟),它可能会经历与 inline caching 类似的优化.

关于java - JVM如何在运行时知道对象的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723581/

相关文章:

java - ExtentReports - 单独的驱动程序实例的单独步骤

java - NetBeans IDE maven项目无法解决依赖关系

java - 如何测量预编译java类的执行时间?

java - Antlworks语法解析器

java - 如何使用 IBM MQ 在字符串中添加带有(名称和值)的 header

java - 无法在 64 位 JVM 上加载 32 位 SWT 库

java - 错误:未找到Gradle DSL方法: 'imlementation()'

java - Hibernate session 处理

java - 如何将文本从 Java 应用程序复制到写字板

java - 用于执行一组算法的 JVM 指令