java模块可以调用c模块吗?
只是出于兴趣,是否可以从java模块调用C模块?如果是,如何做到这一点?是的,您可以使用来做到这一点:查看是的,您使用Java本机接口()从Java调用C/C++java模块可以调用c模块吗?,java,c,module,call,Java,C,Module,Call,只是出于兴趣,是否可以从java模块调用C模块?如果是,如何做到这一点?是的,您可以使用来做到这一点:查看是的,您使用Java本机接口()从Java调用C/C++ 您也可以为此目的使用: 是的。正如其他人已经提到的,JNI或Java本机接口是Sun实现这一点的首选方式。如果您觉得需要从其他语言以及Java调用C代码,我会研究一下,它将透明地为您生成JNI代码,但也允许您使用Python等进行类似的操作。是的,您可以这样做。你是否应该做那件事是另一回事 在赞成方面: 从Java调用C库
- 从Java调用C库将避免在Java中重新编码库的需要(但请参见下文)
- 对于某些计算密集型算法,编写良好的C实现可能比编写良好的Java版本更快
- 某些特定于操作系统的操作无法在纯Java中实现
- 与简单的Java方法调用相比,进行JNI调用的开销更大
- 如果您的C库不是线程安全的,那么您必须非常小心地从Java调用它。通常,C库的实现并没有考虑线程安全
- 如果您的C库存在内存管理问题,可能会破坏Java平台的稳定性,导致JVM崩溃
- 立即调用本机库意味着您的应用程序更难移植,并且需要更复杂的构建过程
- 存在明显的性能损失,通常至少为100%
- 就像运行纯Java代码一样,它是安全的,不需要特殊权限来加载,也不需要为每个目标平台重新编译
是的。正如其他人已经提到的,JNI或Java本机接口是Sun实现这一点的首选方式。如果您觉得需要从其他语言以及Java调用C代码,我会研究一下,它将透明地为您生成JNI代码,但也允许您使用Python等进行类似的操作。是的,您可以这样做。你是否应该做那件事是另一回事 在赞成方面:
(当我说“我真的是指所有与本机代码相关的Java接口。例如,这同样适用于本机代码。)与JNI相比的另一个不利之处是,您将无法以这种方式完成特定于平台的事情。。。这是(IMO)C库最重要的用例。谢谢大家,我只是想尝试一下。。现在有很多关于互操作性的讨论:)