我已经使用Java一段时间了,现在我使用了本机方法和JNI。我认为没有本机功能的Java可以只管理它的内存(创建类和字段并将数据从一个方法传递到另一个方法,并声明原始类型),但所有的东西,如线程管理,数据I / O及其东西和更多类似的东西由于本土方法而完成。
现在我知道本机方法(例如:线程启动声明为private native void start0();
启动一个新线程)具有相应的库(我不确定但应该)直接与JVM实例或其他系统库通信(OpenGL通过这种方式进行通信)。
上述文字是真的还是还有更多内容?还有一个问题,这些库(API的本机方法使用)在哪里加载?我知道您需要使用自定义本机方法加载库。 API是这样做还是由JVM自动完成?
答案 0 :(得分:1)
HotSpot / OpenJDK JVM是用C编写的程序。因此,本机方法是用C语言编写的,并且通过共享库加载,其方式与任何其他C程序加载共享库的方式相同。
在大多数情况下,对线程和IO的本机调用是来自系统调用的瘦包装器,即操作系统完成所有实际工作。