Java 一个人能把多种语言组合成一个二进制吗?

Java 一个人能把多种语言组合成一个二进制吗?,java,c,binary,jvm,Java,C,Binary,Jvm,例如,可能有一些java字节码与一些C语言混合在一起。Jvm将执行java字节码,如果C语言部分被命中,则将执行移交给操作系统。这在技术上是可能的还是在实践中?通常,您可以编写C代码来创建JVM,执行(execve)提供的字节码,或者在单独的线程中使用IPC运行它们,或者使用JNA/JNI交换数据,或者进行操作并等待完成 我遇到了一些使用这种方法的项目(例如Android系统的一部分、Cloudera Impala和其他一些项目),但那里的代码过于复杂,难以追踪。当然,要使它正常工作需要付出太多

例如,可能有一些java字节码与一些C语言混合在一起。Jvm将执行java字节码,如果C语言部分被命中,则将执行移交给操作系统。这在技术上是可能的还是在实践中?

通常,您可以编写C代码来创建JVM,执行(execve)提供的字节码,或者在单独的线程中使用IPC运行它们,或者使用JNA/JNI交换数据,或者进行操作并等待完成

我遇到了一些使用这种方法的项目(例如Android系统的一部分、Cloudera Impala和其他一些项目),但那里的代码过于复杂,难以追踪。当然,要使它正常工作需要付出太多的努力。有时,最好使用不同的技术运行两个进程,使用具有良好数据序列化功能的IPC(thrift、protobuf),或者只使用其中一个


如果您仍然需要同时运行这两个函数,我更愿意用Java构建一个系统,使用JNI调用本机函数,而不是相反。

不完全如此。可以用JNI(或JNA)调用本机代码,但它是C++(所以你必须通过C++链接到它)。有一个C编译器用于JVM。@ ELIOTTFRISCHJNI/JNA也适用于C.(Irc,JNA只适用于C)。java代码通常不存储在“二进制”中,而是在JAR文件中。(不是源文件中的二进制文件,但不是直接可执行的)。@jornverne它不是一个C编译器。它是一个插入任何GCC系列编译器的GCC后端。