【问题标题】:What was the purpose of the Java Virtual Machine to run java on architectures when porting the JVM was necessary anyway?当需要移植 JVM 时,Java 虚拟机在架构上运行 java 的目的是什么?
【发布时间】: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 是中间件,那么下一个问题将是“中间件是什么意思”。
  • 移植解释器比移植编译器容易得多。真的就这么简单。

标签: java jvm porting


【解决方案1】:

在每次需要不同架构时,使用 Java 虚拟机等软件而不是仅仅实现一种语言时,利弊占主导地位。正如上面的评论者所提出的,将编译器移植到新架构以编译一种语言的代码,比方说,没有虚拟机的 Java,将比移植一个设计为不会随时间发生太大变化并处理执行的软件进行更勤奋的任务和内存管理等,用于一种广泛使用的语言,比如我们现有的 Java 语言。因此,与 Java 一起提供的虚拟机在这方面是一个优点,它减少了所需的重构量。

然而,也许最明显的缺点是运行该语言的虚拟机会使使用该语言的应用程序对虚拟机底层硬件的访问速度变慢,这是由于内部垃圾收集机制和内置内存管理共同导致在显着的开销。因此,AAA 游戏等高性能应用程序将被排除和/或严重阻碍。

【讨论】:

  • 没有必要重复“Java 很慢”的古老神话。
  • @Holger 如果您认为 Java 的某些方面超过了 JVM 的开销,请随时回答和/或贡献。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
相关资源
最近更新 更多