Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java x64是否有JNI共享存根实现?_Java_Java Native Interface - Fatal编程技术网

Java x64是否有JNI共享存根实现?

Java x64是否有JNI共享存根实现?,java,java-native-interface,Java,Java Native Interface,这个库使得JNI中的C函数调用映射变得简单。我认为它被称为shared stubs API或类似的东西,在著名的JNI书籍中有描述,过去可以从Oracle站点下载。我再也找不到了。有人知道它现在在哪里吗 最重要的是,在这个实现中,x86体系结构的代码有一个内联汇编部分。我想知道是否有人发现了这种代码的x64模拟?感谢您的帮助 谢谢您可以查看JNA库 您应该记住,从Java调用程序集可能比在Java中编写同样的东西(无论如何都要编译为本机程序集)要慢得多 这只在非常非常罕见的情况下有用。我相信您指

这个库使得JNI中的C函数调用映射变得简单。我认为它被称为shared stubs API或类似的东西,在著名的JNI书籍中有描述,过去可以从Oracle站点下载。我再也找不到了。有人知道它现在在哪里吗

最重要的是,在这个实现中,x86体系结构的代码有一个内联汇编部分。我想知道是否有人发现了这种代码的x64模拟?感谢您的帮助


谢谢

您可以查看JNA库

您应该记住,从Java调用程序集可能比在Java中编写同样的东西(无论如何都要编译为本机程序集)要慢得多


这只在非常非常罕见的情况下有用。

我相信您指的是这本书:
http://192.9.162.55/docs/books/jni/download/jni.pdf

刚刚找到我刚才问的这个老问题。没错,JNA是一条路要走,这就是我最终使用的


关于避免本机调用的建议,性能考虑并不是决定使用本机API的唯一因素。我发现自己经常将Java与用C/C++编写的遗留代码集成在一起,这些代码通常是第三方库,我没有源代码(坦率地说,我也不想有源代码)。可以将这些库包装到本机方法调用中,但这通常需要大量工作。JNA在这方面帮助很大。

是的,这正是我要说的书。在本书的第9章中,有一个关于共享存根的章节。这个共享存根API的实现以前可以从Oracle站点从与本书相同的位置下载,但我现在再也找不到了。此外,共享存根的实现仅适用于32位平台。那里有一个名为dispatch_x86.c的文件,其中包含一个内联汇编中编写的分派函数。我正在为x64 Windows和Linux寻找此分派功能的实现。我不想自己写。好的,我刚刚发现VisualStudio不支持x64上的内联汇编。我想知道是否有人知道在x64上使用共享存根的方法。从未使用过JNA,但我目前正在我的软件中使用共享存根。只是尝试将项目迁移到64位windows。如果我能找到dispatch_x64.c而不是采用完全不同的方式访问本机API,我的生活会更轻松。这就是我的问题的来源。我对JNA持开放态度,但这似乎是一项相当长的时间投资。我不敢相信没有比这更简单的方法来做我想做的事。也许没有,但在放弃之前,进一步研究一下仍然是一个有趣的问题。一般来说,用C写的任何东西都可以用Java写,性能几乎相同。JNA最初是基于盛亮的JNI共享存根。它的功能比最初的版本多得多,而且实际上在实践中使用起来更容易。