java - JRE 与什么对话

标签 java jvm

我对 Java 整体了解甚少甚至一无所知。我也试图自己找到这些信息,但没有成功。这就是为什么我决定在这里问这个问题,尽管我期待着之后的消极态度。所以这里是:

JVM 是否可以访问内存注册表,或者是否使用(调用)底层系统(操作系统或 BIOS)接口(interface)?

我问这个问题是为了了解 JVM 所依赖的基础知识。 - 在操作系统上? - 在硬件平台(处理器)上? - 或者两者都可以?

我正在考虑这个问题,因为我有一个带有处理器Allwinner A20的套件,运行Linux Debian。我想运行一个操纵处理器 GPIO 的代码(如果可能的话,使用 java 代码)。

我读到 Java 可以移植到许多平台。平台 - 操作系统或硬件(CPU)是什么意思?

最佳答案

这种不明确的情况并不少见,可以追溯到 Java 的早期,距今大约 20 年前。

术语 Java 可以指两个不同但紧密相关的事物中的任何一个:

  • 一种本质上面向对象的语言,编译器生成的不是特定于 CPU 的机器代码,而是抽象的机器代码
  • 特定于硬件和操作系统的程序或“运行时”,其工作是在特定硬件/操作系统平台组合上执行抽象机器代码

既然提到了 JRE,那么针对特定硬件/操作系统平台的“JRE”工件在很大程度上只是第二件事,而针对特定硬件/操作系统平台的“JDK”工件则是这两件事;

Java 语言非常刻意地没有任何直接的设施来利用操作系统/硬件特定的资源。一切都是由类抽象的,虽然许多硬件/操作系统对象(例如线程和文件)在 Java(语言的面向对象类库)中具有抽象表示,但许多其他对象(例如进程 ID)却没有。

Java 运行时是一个极其复杂的机器,它可以将 Java 语言编译器生成的抽象机器指令转换为可执行代码,其执行可以在性能上与 native 、手动调整的实现相媲美,但代价是自动化内存管理具有一定的效率,并且可以通过使用 Java 语言编写的相同源代码在不同的操作系统/硬件平台上实现这一点。

尽管 Java 语言没有直接与硬件(即操作系统公开的硬件接口(interface))对话的设施,但 Java 运行时具有加载硬件/操作系统特定 native 库的能力它们是根据特定要求编写的,并且可以向用 Java 语言编写的程序公开特定硬件/操作系统设施的面向对象接口(interface)。

当然,这个世界还有更微妙的地方——两个主要提供商之间存在根本差异——Oracle(前身为 Sun)为桌面和服务器平台生产工具链,而 Google 则为基于 Android 的硬件生产工具链。

相同的源代码在两个工具链之间具有一定程度的兼容性,尽管一个工具链从该源代码生成的抽象机器代码与另一个工具链不兼容。

也就是说,如果您有一个特定的硬件,并且您想通过 Java 语言与其交谈,您需要:

  • 在硬件上运行的操作系统
  • 特定操作系统/硬件平台的 Java 运行时 - 无论是基于 Oracle/Sun 的工作,还是 Google 的
  • 一个符合 Java 运行时期望的 native 库,为 Java 语言的硬件提供合适的接口(interface)

关于java - JRE 与什么对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39594970/

相关文章:

java - 为自定义类实现 hashcode 和 equals

java - Android检查文件错误 “Type mismatch: inferred type is Context but Path! was expected”

java - Java 初学者遇到的参数问题

java - 如何使用 Spring MVC 4 从另一个 Web 项目引用静态资源

java - 我可以手动复制 JVM 完成的一些优化吗?

java - Java中主线程什么时候停止?

Java 相当于 python 的 String lstrip()?

java - 如何通过负载测试优化 JVM & GC

java collat​​z 代码在达到 1 时不会停止

java - 打印所有 JVM 标志