JRE与之交谈

时间:2016-09-20 13:06:47

标签: java jvm

我几乎不了解Java。我也试图通过自己找到这些信息,但没有成功。这就是为什么我决定在这里问它,尽管我后来期待的是消极的态度。所以这就是:

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

我正在问这个问题,以了解JVM所依赖的基本知识。 - 在操作系统上? - 在硬件平台(处理器)上? - 或者可能两者兼而有之?

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

我已经读过Java拥有许多平台的端口。它们对平台 - 操作系统或硬件(CPU)意味着什么?

1 个答案:

答案 0 :(得分:1)

这种不明确的情况并不罕见,可以追溯到近20年前的Java早期。

Java这个术语可以指两个截然不同的东西:

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

由于提到了JRE,特定硬件/操作系统平台的“JRE”工件主要是第二件事,而特定硬件/操作系统平台的“JDK”工件是两件事;

Java-the-language非常故意没有任何直接的工具来利用OS /硬件特定资源。所有东西都是由类抽象出来的,虽然许多硬件/操作系统对象 - 比如Threads和Files-在Java-the-language的面向对象类库中有抽象表示,但许多其他 - 例如进程ID - 却没有。

Java-the-runtime是一个非常复杂的机器,可以将Java-the-language编译器生成的抽象机器指令转换为可执行代码,执行代码可以在性能上与原生的,手动调整的实现相媲美,代价是对于自动化内存管理有一定效率 - 并且可以在不同的OS /硬件平台上使用Java-the-language编写的相同源代码实现。

虽然Java-the-language没有直接与硬件对话的设施 - 即操作系统公开的硬件接口 - 但Java-the-runtime能够加载硬件/操作系统特定的本机库根据特定要求编写的,可以将面向对象的接口暴露给特定的硬件/ OS工具,以及用Java语言编写的程序。

在这个世界上当然有更多微妙之处 - 两个主要提供商之间存在根本区别 - 甲骨文(前身为Sun,生产桌面和服务器平台的工具链)和谷歌生产基于Android硬件的工具链。

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

也就是说,如果你有一个特定的硬件,而你想用Java语言与它交谈,你需要:

  • 在硬件上运行的操作系统
  • 特定操作系统/硬件平台的Java运行时 - 无论是基于Oracle / Sun的工作,还是基于Google的
  • 一个符合Java-the-runtime所期望的本机库,它为Java-the-language提供了适合硬件的接口