来自:
JDK1.0版本包含了一个早期的本机方法接口,缺乏本机代码和Java代码之间的清晰分离。在这个接口中,本机将直接扩展到JVM结构中,因此不能在JVM实现、平台甚至JDK版本之间移植。使用JDK1.0模型升级大量本地应用程序的成本很高,开发能够使用多个JVM实现运行的本地应用程序也是昂贵的。
本机意味着什么将直接扩展到JVM结构中,因此不能跨JVM实现进行移植?我不明白这个。
发布于 2012-05-16 05:59:27
当前JNI的文档包含了关于旧接口的有趣内容:
JDK1.0是随本机方法接口一起提供的。不幸的是,有两个主要原因导致这个接口不适合其他Java采用。 首先,本机代码作为C结构的成员访问Java对象中的字段。但是,Java语言规范并没有定义如何在内存中部署对象。如果Java以不同的方式在内存中放置对象,那么程序员将不得不重新编译本机方法库。 ..。
这意味着本机代码可以直接访问内存中的对象值,而不是遍历某个API。这相当于直接访问Java中的字段,而不是使用getters/setters。这意味着,如果不破坏与使用旧的本机接口的任何代码的兼容性,则无法更改字段的基础布局。
我找到了一个本机方法教程的副本来自这里的JDK 1.0.2。它包括一个关于从本机代码处理Java对象的部分。
现代的JNI只允许通过方法调用访问Java对象字段。这样,对象和许多其他东西的布局就可以改变,而不会破坏兼容性。
https://stackoverflow.com/questions/10612623
复制相似问题