java - JVM如何调用宿主机环境中的native方法

标签 java java-native-interface native-code native-methods

这几天我一直在阅读Java Native Interface。所以顺便说一句我有疑问。举个例子,如果我们需要在Java程序中进行I/O操作,我们为我练习Java API/O 操作。此外,在低级别,它应该映射到操作系统级别的 I/O 处理。问题是 Java API 如何与主机操作系统中的 native I/O 方法交互。

简短而甜蜜,我听说 JDK 中的一些方法是 native 实现的。Java API 是如何调用这些 native 方法的。我猜是 JNI(Java native 接口(interface))。

谁能澄清我的疑惑。

谢谢

女娲乱斗

最佳答案

Java 中的方法可以标记为native 以指示它们的实现不是用Java 或字节码编写的,而是以平台相关的方式编写的。例如,Java I/O 操作几乎总是作为 native 方法实现,以便它们可以利用机器上的底层硬件或 OS 接口(interface)。

无法保证 native 方法的实际实现方式。在 Sun(现在是 Oracle)的 JVM 实现中,您可以通过使用 JNI 定义专门命名的 C 函数来编写 native 方法的实现,这些函数与自定义库交互以便与 Java 代码交互。然而,另一个 JVM 可以以完全不同的方式实现 native 方法。事实上,现在我正在从事一个用 JavaScript 实现 JVM 的项目,因此所有 native 方法都是用 JavaScript 而不是 C 实现的。

简而言之,native 方法的实现没有“单一方式”。重点是为 JVM 和 Java 库实现提供最大的灵 active ,因此行为指定越少越好。

关于java - JVM如何调用宿主机环境中的native方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5115939/

相关文章:

java - 如果 jni 调用崩溃,如何在 linux 上找到失败的原因?

javascript - Javascript 中的数学错误 : safe to use JS for important stuff?

java - 如何在堆栈上实现函数 isFull() 的异常

java - 在jsp中接收类名作为用户输入有什么问题

java - 搜索功能的 SQL 查询

java - while循环中的递归,它是如何工作的?

java - 如何使用 JNI 使用 java 程序运行 c 程序

java - 如何使用 JNI 将 System.out 从 Java 传递到 C?

java - 崩溃发生在本地代码中的 Java 虚拟机之外

android - NewObject 调用的间接引用无效