【问题标题】:when the actual jvm installation occured? [duplicate]当实际的jvm安装发生时? [复制]
【发布时间】:2020-12-01 15:22:14
【问题描述】:

假设我有一个全新的操作系统,比如 Windows 10。 我安装并运行了一个类似intellij的软件(由java编写) 我没有安装任何jvm或jre,我该如何运行?

【问题讨论】:

  • 如果不是,是不是说jvm安装是在intellij安装过程中发生的??
  • IntelliJ 附带它的自己的 JRE。所以当你运行 IntelliJ 时,仍然有一个 JVM。您可以使用 jlink / jpackage 或其他一些类似的第三方工具在自己的应用程序中模仿这一点(注意 IntelliJ 所做的更复杂,因为 JetBrains 维护自己基于 OpenJDK 的修改发行版)。

标签: java jvm


【解决方案1】:

我可以在没有 jvm 的情况下运行 java 软件吗?

“机器”只能运行“机器代码”(本机二进制)。机器代码必须与您正在运行的机器的架构兼容。

jvm 是一个虚拟模拟机器的程序。您可以将 java bytecode 视为运行在 java virtual 机器上的特殊类型的机器代码。换句话说,.class 文件包含可以在 jvm 上运行的机器指令。

那么,一些用 java 编写的软件(如 IntelliJ)如何在其他机器架构上运行?那是因为在那些情况下,它们并没有被编译成在 jvm 上运行的字节码,而是直接编译成目标平台的机器指令。

同样的.java代码可以编译成:

  • bytecodejvm 上运行

  • 在 windows 环境下运行的 windows 原生二进制文件

  • apkAndroid 上运行

等等

【讨论】:

  • "那么一些用java编写的软件(比如IntelliJ)是如何在其他机器架构上运行的呢?那是因为在那些情况下,它们没有被编译成在jvm上运行的字节码, 而是直接编译为目标平台的机器指令”——正如我在对该问题的评论中提到的,IntelliJ 不会将字节码预编译为目标特定的机器代码。相反,它在安装时嵌入了 JVM/JRE。但是,您所描述的绝对是可能的(例如 GraalVM 原生映像,尽管它使用“Substrate VM”)。
猜你喜欢
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 2013-01-02
  • 2020-01-29
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多