Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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模块可以调用c模块吗?_Java_C_Module_Call - Fatal编程技术网

java模块可以调用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本机接口()从Java调用C/C++

您也可以为此目的使用:


  • 是的。正如其他人已经提到的,JNI或Java本机接口是Sun实现这一点的首选方式。如果您觉得需要从其他语言以及Java调用C代码,我会研究一下,它将透明地为您生成JNI代码,但也允许您使用Python等进行类似的操作。

    是的,您可以这样做。你是否应该做那件事是另一回事

    在赞成方面:

    • 从Java调用C库将避免在Java中重新编码库的需要(但请参见下文)

    • 对于某些计算密集型算法,编写良好的C实现可能比编写良好的Java版本更快

    • 某些特定于操作系统的操作无法在纯Java中实现

    在反面:

    • 与简单的Java方法调用相比,进行JNI调用的开销更大

    • 如果您的C库不是线程安全的,那么您必须非常小心地从Java调用它。通常,C库的实现并没有考虑线程安全

    • 如果您的C库存在内存管理问题,可能会破坏Java平台的稳定性,导致JVM崩溃

    • 立即调用本机库意味着您的应用程序更难移植,并且需要更复杂的构建过程

    有许多方法可以将您的C代码转换为.jar可移植Java类,您可以直接从Java调用这些类

    对JNI的损害:

    • 存在明显的性能损失,通常至少为100%
    与JNI相比的好处:

    • 就像运行纯Java代码一样,它是安全的,不需要特殊权限来加载,也不需要为每个目标平台重新编译

    (当我说“我真的是指所有与本机代码相关的Java接口。例如,这同样适用于本机代码。)

    与JNI相比的另一个不利之处是,您将无法以这种方式完成特定于平台的事情。。。这是(IMO)C库最重要的用例。谢谢大家,我只是想尝试一下。。现在有很多关于互操作性的讨论:)