jdk1.0如何在本机代码和Java代码之间缺乏清晰的分离?

sap*_*Pro 2 java java-native-interface native

来自IBM Link:

JDK 1.0版本包含一个早期的本机方法接口,它缺少原生代码和Java代码之间的清晰分离.在此接口中,本机将直接进入JVM结构,因此无法跨JVM实现,平台甚至JDK版本移植.使用JDK 1.0模型升级具有大量本机的应用程序是昂贵的,开发可以运行多个JVM实现的本机也是如此.

本机的含义是否会直接进入JVM结构,因此无法跨JVM实现移植?我不明白这一点.

Joa*_*uer 5

当前JNI文档包含有关旧接口的有趣内容:

JDK 1.0附带了本机方法接口.不幸的是,这个接口不适合其他Java VM采用有两个主要原因.

首先,本机代码访问Java对象中的字段作为C结构的成员.但是,Java语言规范没有定义对象在内存中的布局方式.如果Java VM在内存中以不同方式布局对象,则程序员必须重新编译本机方法库.

...

这意味着本机代码可以直接访问内存中对象的值,而不是通过某些API.这相当于直接访问Java中的字段,而不是使用getter/setter.这意味着在不破坏与使用旧的本机接口的任何代码的兼容性的情况下,永远不能更改字段的基础布局.

我在这里找到了JDK 1.0.2的本机方法教程副本.它包含一个关于从本机代码处理Java对象的部分.

现代JNI只能通过方法调用访问Java对象字段.这样,对象的布局和许多其他东西可以在不破坏兼容性的情况下改变.