Ser*_*ity 76 java cross-platform
我刚开始学习Java,我对平台独立性这个话题感到困惑.
"独立"是否意味着Java代码应该在任何机器上运行而不需要安装特殊软件?然而,JVM需要存在于机器中.
例如,我们需要使用Turbo C编译器来编译C/C++源代码然后执行它.机器必须有C编译器.
当Java被描述为"平台无关"时,有人可以说是什么意思吗?
Edw*_*uck 106
通常,编译的代码是CPU"执行"程序所需的精确指令集.在Java中,编译的代码是"虚拟CPU"的一组精确指令,需要在每台物理机器上运行相同的指令.
因此,从某种意义上说,Java语言的设计者决定语言和编译的代码将独立于平台,但由于代码最终必须在物理平台上运行,因此他们选择将所有与平台相关的代码放入JVM.
对JVM的这一要求与您的Turbo C示例形成对比.使用Turbo C,编译器将生成与平台相关的代码,并且不需要JVM工作,因为编译的Turbo C程序可以由CPU直接执行.
使用Java,CPU执行与平台相关的JVM.这个运行的JVM然后执行独立于平台的Java字节码,前提是你有一个可供其执行的JVM.您可能会说编写Java代码,不编写要在物理机上执行的代码,编写要在Java虚拟机上执行的代码.
所有这些Java字节码在所有Java虚拟机上运行的唯一方法是为Java虚拟机的工作方式编写了一个相当严格的标准.这意味着无论您使用的是什么物理平台,Java字节码与JVM的接口部分都只能以一种方式工作.由于所有JVM的工作方式完全相同,因此无需重新编译,相同的代码在任何地方都可以完全相同.如果您无法通过测试以确保它们相同,则不允许将您的虚拟机称为"Java虚拟机".
当然,有些方法可以破坏Java程序的可移植性.您可以编写一个程序来查找仅在一个操作系统上找到的文件(例如cmd.exe).您可以使用JNI,它有效地允许您将已编译的C或C++代码放入类中.您可以使用仅适用于特定操作系统的约定(例如假设":"分隔目录).但是你可以保证永远不必为不同的机器重新编译程序,除非你正在做一些非常特殊的事情(比如JNI).
Jat*_*ana 54
Technical Article on How java is platform indepedent?
Run Code Online (Sandbox Code Playgroud)
在进入细节之前,首先你必须了解平台的意思是什么?平台由计算机硬件(主要是微处理器的架构)和OS组成.平台=硬件+操作系统
任何平台独立的东西都可以在任何操作系统和硬件上运行.
Java是独立于平台的,因此java可以在任何操作系统和硬件上运行.现在的问题是它是如何独立于平台的?
这是因为Byte Code的魔力是OS独立的.当java编译器编译任何代码时,它会生成字节代码而不是机器本机代码(与C编译器不同).现在这个字节代码需要一个解释器在一台机器上执行.这个解释器是JVM.因此JVM读取该字节代码(即机器独立)并执行它.不同的JVM是针对不同的操作系统而设计的,字节码可以在不同的操作系统上运行.
在C或C++(非平台独立的语言)的情况下,编译器生成操作系统依赖的.exe文件,因此当我们在另一个操作系统上运行此.exe文件时,它将无法运行,因为此文件是操作系统依赖的,因此与另一个操作系统.
最后,一个中间OS独立的字节代码使java平台独立.
Mat*_*hen 25
这意味着Java程序员(理论上)不需要了解机器或操作系统的详细信息.这些细节确实存在,JVM和类库处理它们.此外,与C形成鲜明对比的是,Java二进制文件(字节码)通常可以移动到完全不同的系统而无需修改或重新编译.
JVM是一个"模拟机器",可以安装在不同的系统上.通过这种方式,相同的Java代码可以在不同的系统上运行,因为它依赖于JVM,而不依赖于操作系统本身.
也就是说,这允许程序员与虚拟系统(JVM)通信并利用其功能,而不是特定的机器和OS功能.由于Java仅依赖于JVM,因此它与平台无关(如果平台安装了JVM).
简而言之,Java本身并不是平台独立的,它需要为应该运行的所有系统安装JVM.但是,它将在安装了JVM的所有系统上运行.
Java 是平台无关的,因为它具有 JVM(Java 虚拟机)。让我们用一个现实生活中的例子来说明它。假设您对家人有自由。但为什么?
因为你很了解他们,他们也很了解你。但是,你对我的家人没有自由。因为你不认识他们,他们也不认识你。但是,如果我是你的朋友,什么时候我可以把你介绍给我的家人,那么你就可以和他们畅所欲言了。
同理,如果你是代码而我是JVM。还有,你家是windows平台,我家是Linux平台。如果您是 C 或其他依赖平台的语言,则您只认识您的家人,反之亦然。这就是为什么只有编写您的平台知道该代码并会支持它。但是如果你是一个JAVA代码并且当你来到我的家庭viz。Linux 平台,如果你在那里找到我,JVM,那么我可以向你介绍我的家人,Linux 平台,你将能够与它互动。
对于依赖平台的语言,没有像 JVM 这样的朋友可以向任何平台家族介绍自己。这就是 Java 与平台无关的方式。:)
| 归档时间: |
|
| 查看次数: |
143786 次 |
| 最近记录: |