代码之家  ›  专栏  ›  技术社区  ›  Luis Miguel Serrano

为什么Java平台在理论上是独立的,在实践中是依赖于平台的?

  •  8
  • Luis Miguel Serrano  · 技术社区  · 14 年前

    然而,为什么一个普通的计算机Java程序(例如在Java中的简单Hello世界中,对于Windows或Linux)不能在移动电话中运行相同的程序,而移动电话也安装了特定的JVM来正确地解释事情呢?

    为什么在某些情况下有必要改变程序的架构,比如Android开发,或者使用Java ME使应用程序特定于某些通用手机?

    我知道以前还有其他问题,比如 this ,但这并不能集中我在这里的目标。

    5 回复  |  直到 7 年前
        1
  •  8
  •   SimonJ    14 年前

    可移植性的单位是 而不是 . 声明并初始化整型变量的类 在你描述的所有平台上运行,还有很多其他平台。他们理解相同的字节码,即使他们使用不同的机制执行它,从字节码解释器到JIT编译,再到Android的Dalvik(它将JVM字节码转换成自己的指令集)。

    即使我们只关注一个整数变量,使用“核心”功能的Java 在这些设备上工作。J2ME、Android和J2SE之间有很多共同点(尤其是后两个J2ME是为资源有限的设备设计的标准Java API的精简版本,因此可用的标准API更少)。

    在Windows /Mac/Linux系统中,应用程序通常是显式启动、使用和-当你完成时,告诉它退出。与Android手机相比:在这种情况下,应用程序可能是在响应某个事件时启动的(可能是收到的短信,或者是从web上下载的特定类型的文件) 怎样 为什么? 它开始了-一个简单的 public static main(String[] args)

    这些并不是晦涩难懂的功能——它们是手机作为手机使用所必需的——所以所有的本地应用程序都必须处理它们。

        2
  •  4
  •   pravin penshanwar    13 年前

    编译Java代码时,会生成一个独立于系统的字节码(类文件)。这个字节码被馈送到系统中的JVM(Java虚拟机)。因为每个系统都有自己的JVM,所以在哪里编译源代码并不重要。编译器生成的字节码可以由任何机器的任何JVM解释。因此它被称为平台无关语言。

    谢谢

        3
  •  2
  •   Karl Anderson    11 年前

    记住并明确一点,只有Java语言是独立于平台的,并试图理解句子的含义。Java与平台无关意味着使用Java开发的代码可以在任何机器上运行。

    当您编译 .java .class 文件和它包含字节码,这个字节码是平台无关的,你可以在任何机器上运行它,这就是Java语言的平台无关性。

    现在你说它不是在实践中,所以原因只是Java语言是独立于平台的,但是它的运行时环境,或者说JVM,是依赖于平台的,它是为每个操作系统分别编写的。所以我们可以说Java语言是独立于平台的,但是它的运行时环境是依赖于平台的。

        4
  •  1
  •   Mitchell    14 年前

        5
  •  1
  •   kakarot    11 年前

    Sun micro systems发布了不同版本的jdk。一个是基于windows的,另一个是基于linux/unix的。当我们安装jdk时,会得到jvm、jre和javac。假设我们在装有英特尔处理器的windows中编写一个java程序,安装了windows jdk,那么jdk的java编译器会将.java文件转换成.class文件,其中包含与汇编语言代码类似的字节码指令这些字节码指令只有jvm才能理解。如果我们使用Windows O.S中生成的.class文件,如果我们在Linux中运行,那么Linux机器的JVM通过使用由JavaSoT人开发并被放置为JVM的一部分的近似200 +指令集来内部重写Java程序。然后.class文件被执行。所以这里的重点是,jdk依赖于平台,但是.class不依赖于平台,它独立于平台,因为jvm只负责运行任何.class文件。每个jdk的jvm内部都有预定义的指令集,即大约200+。