JDK 1.0版本包含一个缺乏干净的早期本机方法接口 本机代码和Java代码之间的分离。在此界面中,本机会到达 直接进入JVM结构,因此无法跨JVM实现移植, 平台,甚至是JDK的版本。升级具有实质性的应用程序 使用JDK 1.0模型的本地人数量很高,开发本地人也是如此 可以运行多个JVM实现。
本地人的意思是什么? 直接进入JVM结构,因此无法跨JVM实现移植?我不明白这一点。
答案 0 :(得分:5)
documentation for the current JNI包含有关旧界面的有趣内容:
JDK 1.0附带了本机方法接口。不幸的是,这个接口不适合其他Java VM采用有两个主要原因。
首先,本机代码访问Java对象中的字段作为C结构的成员。但是,Java语言规范没有定义对象在内存中的布局方式。如果Java VM在内存中以不同方式布局对象,则程序员必须重新编译本机方法库。
...
这意味着本机代码可以直接访问内存中对象的值,而不是通过某些API。这相当于直接访问Java中的字段,而不是使用getter / setter。这意味着在不破坏与使用旧的本机接口的任何代码的兼容性的情况下,永远不会更改字段的基础布局。
我找到了copy of the native method tutorial from the JDK 1.0.2 here。它包含handling Java objects from native code部分。
现代JNI只能通过方法调用访问Java对象字段。这样,对象和许多其他东西的布局可以在不破坏兼容性的情况下进行更改。