我使用 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/