java - 如何判断 JDK 类是 native 实现的还是在 Java 代码中实现的?

标签 java

例如,在 IntelliJ 中探索源类时,您会在 java.lang.reflect 中找到类似 Constructor 的类...所有方法的参数都是 var0,var1,var2,...varN。但除此之外,如何知道它是本地实现的?

编辑:正确的问题实际上是如何判断一个方法是否是 Java 中的 native 方法,因为正如响应者所指出的,类本身不能是“ native ”的。

最佳答案

一般来说,类本身从来都不是原生的。只有方法才能有 native 实现。

但这并不意味着 JVM 不能以特殊方式处理某些类。但你不应该能够分辨出其中的区别。 JVM 将它们视为优化(例如 String 类),或者因为否则会非常不方便(例如 NoClassDefFoundError 被视为一种特殊的方式,即使类不存在于您的类路径中也可以抛出并打印。您可以通过移动/重命名 rt.jar 并运行 java 来尝试。

至于构造函数参数被命名为 varN,很可能是因为您实际上没有安装 JDK 源,并且无论您使用什么 IDE,都会显示您反编译 java 代码,这没有保留变量名。对于 Constructor 类,构造函数可能实际上是在 java 中实现的,但从 native 代码调用并返回对象。

如果一个方法具有 native 修饰符,则该方法是native。但也有一些方法被 JVM 视为内在函数。了解这些以及特殊类的唯一方法当然是查看 JVM 源代码。 JVM 优化和内在优化之间也有一条非常细的界限,因为您通常不会修改 JVM 代码,所以除非您是 JDK 开发人员,否则这并不重要。这也是一个实现细节,可能会在不同的 JVM 或不同的 JVM 版本中发生变化。事实上,有人尝试完全用 java 编写 JVM,除了一些微小的启动包装器之外,没有任何真正的 native 代码。在这些情况下,一切都在java中。没有 native 代码。

关于java - 如何判断 JDK 类是 native 实现的还是在 Java 代码中实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52933691/

相关文章:

java - 使用构造函数注入(inject)模式对 spring boot 进行集成测试

java - 用于客户端应用程序的性能分析技巧 Netbeans

java - 预定定时器阻塞自身

javascript - Java 和 Javascript - Lastmodified 在 Linux 上

java - SwitchCompat 无法与 firebase 数据库正常工作

c# - EasyNetQ 未从使用 RabbitMQ Java 客户端 API 发布的队列中读取消息

java - 如何在jsp中打印列表列表和其他类型的数据

java - JTable - UI 在多次插入时卡住

java - 使用 SimpleDateFormat 获取 UTC 日期

java.rmi.ConnectException : Connection refused to host: 192. 168.1.8;嵌套异常是: