gpt4 book ai didi

java - java虚拟机如何将用户级函数与其内部函数连接起来?

转载 作者:行者123 更新时间:2023-12-01 20:04:27 25 4
gpt4 key购买 nike

JVM如何翻译API它在 JVM 中的实现?

它与“Linux Kernel syscall”实现类似吗?如果是的话,这些接口(interface)在哪里?希望看到源代码。

enter image description here

图来自https://www.artima.com/insidejvm/ed2/introarch4.html

例如,

Any Java virtual machine implementation must take care to connect these methods of class ClassLoader to the internal class loader subsystem.

https://www.artima.com/insidejvm/ed2/jvmP.html

最佳答案

您链接的 API ( https://docs.oracle.com/javase/7/docs/api/ ) 基本上是一个普通的类库。当你安装了 JDK 后,将会有一个文件,src.zipsrc.jar,具体取决于版本,其中包含该库大部分的纯 Java 源代码。在 Java 8 及之前的所有版本中,编译后的 API 类均以普通 jar 文件形式提供,大多数 API 类位于 rt.jar 中。从 Java 9 开始,使用了新的模块文件,但大部分 API 仍然作为普通 Java 代码实现。

您甚至可以在线浏览某些版本的源代码,例如this is the implementation of Object.toString() of version 8, update 40, beta 25, hosted at grepcode.com .

因此,对于大多数方法,当您调用 API 方法时,不涉及任何“类似于‘Linux 内核系统调用’”的内容。它的工作方式与普通方法调用类似,优化器甚至可以在运行时将 JRE 特定代码内联到应用程序的代码中。您还可以在调试时单步执行 JRE 代码。

只有少数方法没有以纯 Java 代码的形式实现,例如Object.getClass() 是一种 native 方法,只能以 JVM 特定方式实现。

有两种通用方法来实现这些方法。有一个standardized interface, JNI ,允许任意 native 代码和 Java 代码交互。它包括声明为原生的 Java 方法的调用及其通过 JNI 的实现之间的特殊链接。但有些方法被 JVM 作为内部操作处理,这意味着这些众所周知的方法(例如 getClass())的调用是由解释器直接处理的/optimizer 就像专用的字节码指令。当存在特定于平台的、更有效的替代方案时,这种非常有效的处理有时甚至用于具有普通 Java 实现的方法。例如,Integer.rotateLeftrotateRight有一个纯Java实现,但如果运行时实际使用的CPU有专用的按位旋转指令,所有优化的JVM都会将这些方法的调用替换为使用这些CPU指令的内部操作。

关于java - java虚拟机如何将用户级函数与其内部函数连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47621584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com