【发布时间】:2019-03-23 02:09:10
【问题描述】:
我正在尝试分析移植和虚拟机的性质,以尽量减少移植量。
回顾事物的历史,有一件事在我的脑海中很突出。 Java 虚拟机,即 SDK/JRE,虽然能够动态处理 Java 类和/或编译 Java 源代码,但本质上是中间件,不是吗?我想 Oracle 的人会为不同的操作系统重新编译它,以便 Java 语言可以用于每个相应的操作系统。
所以,这一切都让我想到了我上面提到的问题,“当 Java 本身可以作为另一种语言存在并且可以移植到不同的架构而不需要移植中间件(即中间件)时,为什么还要建立 Java 虚拟机?情况下是JVM)?”
这只是一个假设,但是否因为 JVM 被设计为在架构之间具有最小的移植要求,因此在架构之间修改现有 java 需要更少的工作? 谢谢。
【问题讨论】:
-
因为 JVM 只需要移植到每个支持的平台一次,而每个用 Java 编写的软件都需要为每个平台维护不同的版本。各有利弊 - Java 是一种在虚拟机上运行的垃圾收集语言,因此有相当多的开销,并且运行速度比用 C/C++ 编写的干净代码慢,但 pro 不需要内存管理,也不需要需要管理多个代码库。
-
我明白了,所以从技术上讲,可以假定 c/c++ 需要一个类似的“vm/garbage collector”,以消除对内存管理的需要,并为这些语言管理多个代码库好吗?
-
嗯,是的……但是 C/C++ 语言的设计方式使得垃圾收集存在问题。例如,如果应用程序可以对指针执行算术运算,那么 GC 很难可靠地知道应用程序变量何时引用真正的堆对象。
-
中间件是一个定义不明确的术语。因此,如果您断言 JVM 是中间件,那么下一个问题将是“中间件是什么意思”。
-
移植解释器比移植编译器容易得多。真的就这么简单。