【问题标题】:How exactly does Java API interact with JVM?Java API 究竟是如何与 JVM 交互的?
【发布时间】:2015-12-25 08:03:17
【问题描述】:

我使用 Java 已经有一段时间了,现在我开始使用本机方法和 JNI。我认为没有本机功能的 Java 可以只管理它的内存(创建类和字段并将数据从一种方法传递到另一种方法,并声明原始类型),但所有的东西,如线程管理、数据 I/O 及其东西和更多类似的东西多亏了本机方法。

现在我知道本机方法(例如:线程启动被声明为 private native void start0(); 启动一个新线程)具有相应的库(我不确定但应该)直接与 JVM 实例或其他系统库(OpenGL以这种方式通信)。

上面的文字是真的还是有更多的事情发生?还有一个问题,这些库(API 的本机方法使用)在哪里加载?我知道您需要使用自定义本机方法加载库。 API 这样做还是由 JVM 自动完成?

【问题讨论】:

  • 这对于 StackOverflow 来说确实是一个太宽泛的话题,并且也接近于“离题,因为它是对外部资源的请求”。最好的资源是阅读JVM Specification
  • 是的,我知道,但这里有一些人可能已经处理了更长的时间。而且我也看过规范。但是解释了 jvm 如何处理本地方法而不是显示库和 java API 的结构

标签: java jvm java-native-interface


【解决方案1】:

HotSpot/OpenJDK JVM 是用 C 编写的程序。因此,本地方法是用 C 编写的,并通过共享库加载,与任何其他 C 程序加载共享库的方式相同。

在大多数情况下,对线程和 IO 的本机调用是系统调用的精简包装,即操作系统会完成所有实际工作。

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多