java - Java 标准库如何与 native 代码通信?

标签 java jvm java-native-interface jvm-hotspot

他们使用 Mono 的 PInvoke 之类的东西吗?或者它更像是在运行时启动之前注册的内部调用? java 是否有用于处理像 mscorlib.dll 这样的 native 调用的基础库?如果我想在 C 代码中调用 JVM,它的库是否会查找 .so/.dll 文件?如果我静态链接所有 JRE native 库,它会对 Java 标准库产生影响吗?

最佳答案

他们使用 JNI,正如公开记录的那样,为特定平台调用本地共享库。

就从 C 代码调用 JVM 而言,JVM 使用共享库(DLL、SO 等)。快速搜索 JDK 6 源代码不会显示任何 System.loadLibrary() 以提供核心 native 支持(如 Object、String 等中的 native 方法)。这向我表明,这些方法的 native 代码(从 JRE/bin 目录的内容来看似乎在 DLL 中)由 java.exe(和 Windows 中的 javaw.exe)明确链接。

当我上次查看这些内容时,从 C 代码调用 JVM 的要求是 JNI 的一个有据可查的部分 - 我强烈建议您引用该 doco 以进一步进行。我们甚至成功地为 IBM AS/400 Java 1.1 JVM 编写了 native C 包装器/加载器。

关于java - Java 标准库如何与 native 代码通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3251745/

相关文章:

java - ChronicleMap 和 parallelStream

java - 启用 JVMTI *功能* 查询局部变量的开销

java - 为什么来自类的java字节码出现新静态内部类的代码出现jvm指令ACONST_NULL

Android:将浮点值从 Java 传递到 JNI 始终为 NaN

java - 限制 JSplitPane 分隔线移动

java - 在 JSP 中保存单选按钮

java - 操作系统能否阻止 Java 进程进行垃圾收集?

java - 内存泄漏在 MAT 中显示为 GC root : Native Stack

android - AudioTrack 的问题

java - 在 OWL/XML 语法中添加新标签