java - Java API 到底是如何与 JVM 交互的?

标签 java jvm java-native-interface

我使用 Java 已经有一段时间了,现在我开始接触 native 方法和 JNI。我认为没有 native 功能的 Java 只能管理其内存(创建类和字段并将数据从一种方法传递到另一种方法,并声明基本类型),但所有诸如线程管理、数据 I/O 及其内容以及更多类似的内容感谢 native 方法完成。

现在我知道 native 方法(例如:线程启动被声明为 private native void start0(); ,它启动一个新线程)具有相应的库(我不确定但应该)直接与 JVM 实例或其他系统库通信(OpenGL 以这种方式通信)。

上面的文字是真的还是有更多的事情发生?还有一个问题,这些库(API 的 native 方法使用的)在哪里加载?我知道您需要使用自定义 native 方法加载库。 API 这样做还是由 JVM 自动完成?

最佳答案

HotSpot/OpenJDK JVM 是用 C 编写的程序。因此, native 方法是用 C 编写的,并通过共享库加载,就像任何其他 C 程序加载共享库一样。

在大多数情况下,对线程和 IO 的 native 调用是系统调用的精简包装,即操作系统完成所有实际工作。

关于java - Java API 到底是如何与 JVM 交互的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34458271/

相关文章:

java - 将允许和不允许的 URL 规则附加到 java 列表中

java - 来自类变量的 JNI jstring?

java - Android ndk jni 自动生成函数

android - 使用 Android Studio 调试 C++ 库

Java包命名合法语法规则

java - POI 用变音符号阅读

java - Jxl NullPointerException 与 workbook.close() 方法有关

java - Clover Java堆空间错误

java - JMeter中使用多线程测试时无法解决 "Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread"

java - Antlworks语法解析器