java 的 WORA 概念是针对 OS 还是硬件?Android 运行时如何管理它?

Is java’s WORA concept targeted at the OS or hardware and how does the Android Runtime manage it?

虽然我在 C/C++ 上练习了很多,但我对编程还是很陌生,现在我正在学习 Java 的基础知识。 Java的“一次编写,运行无处不在”的概念一直让我感到困惑。

  1. C 等语言是否在源代码级别完全可移植,只需要为 cpu 体系结构更改编译器?如果是,我们是否可以将 C 视为汇编级别的 WORA 语言?

2.What 是 jvm 在源代码级别提供的抽象吗?例如,对于 C++ 中的简单 Hello World,我们必须包含每个 OS 不同的 header,但在 java 中并非如此。

3.Because 的 jvm 抽象,java 是否仅限于高级“应用程序”开发?理论上你能在Java中写一个OS或driver吗? Android的哪些部分写在Java中?当 Android 运行 时间将应用程序 jvm 字节码“翻译”成本机机器代码时,它是否添加了 (link) 其他根本无法在源代码中添加的指令?

是也不是。

Are Languages such as C completely portable at a source level , with only the need to change the compiler for the cpu architecture?If yes , could we consider even C a WORA language over assembly level?

这取决于程序。如果您使用内联汇编或内部函数,则必须重写此程序。此外 big/little-endian 可能是个问题。

What are the abstractions that the jvm provides on a source level? For example , for a simple Hello World in C++ we have to include the header that is different for each OS, but in java this is not the case.

JVM/Java 抽象出很多硬件细节,例如 little/big endian,没有内联汇编,没有源代码级别的内在函数(但是在运行时,例如 JVM 使用 AES-NI 指令例如,如果可用)。 在 Java 中,我们不需要导入任何东西,因为包 java.lang 是默认导入的。

Because of the abstractions of the jvm , is java limited to high level ‘app’ development? Can you theoretically write an OS or driver in Java? What parts of Android are written in Java? When the Android Runtime ‘translates’ app jvm bytecode into native machine code does it add (link) other instructions that were simply not addable in the source?

Sun 试图在 Java (https://en.wikipedia.org/wiki/JavaOS), other ones are for example JNode(https://sourceforge.net/projects/jnode/) 中写一个 OS。

android 的 UI 的很大一部分写在 java 和系统本身的(较小的)部分中,而内核和网络堆栈之类的东西是用像 C 这样的低级语言编写。(这里是 android 文档中的图像:https://developer.android.com/guide/platform/images/android-stack_2x.png

android 的 JVM(Android 运行时:https://en.wikipedia.org/wiki/Android_Runtime)是一个 AOT 编译器,可将您的应用程序编译为适合您设备的优化机器代码。