jvm和java无关_当需要JVM来运行时,如何与Java平台无关?

通常,编译代码是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)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值