Thi*_*uda 1 java java-native-interface jvm jvm-hotspot
他们使用像Mono的PInvoke这样的东西吗?或者更像是在运行时启动之前注册的内部调用?java有一个基本库来处理像mscorlib.dll这样的本机调用吗?如果我想在C代码中调用JVM,它库是否会查找.so/.dll文件?如果我静态链接所有JRE本机库,它会对Java标准库产生影响吗?
他们使用JNI,就像公开记录一样,为特定平台调用本机共享库.
就从C代码调用JVM而言,JVM使用共享库(DLL,SO等).快速搜索JDK 6源代码不会显示核心本机支持的任何System.loadLibrary()(如Object,String等中的本机方法).这告诉我,这些方法的本机代码,似乎是在DLL中,从JRE/bin目录的内容来看,由java.exe(和Windows中的javaw.exe)显式链接.
当我上次查看这些内容时,从C代码调用JVM的要求是JNI中记录良好的部分 - 我强烈建议您参考该doco继续进行.我们甚至为IBM AS/400 Java 1.1 JVM成功编写了本机C包装器/加载器.