字节码比本地代码有什么优势?
看起来您可以使用字节码执行的任何操作都可以像使用本机代码一样轻松,更快地完成。从理论上讲,您甚至可以通过以字节码分发程序和库,然后在安装时编译为本机代码,而不是JIT来保持平台和语言的独立性。
因此,通常来说,什么时候您要执行字节码而不是本机?
回答:
SGI的Hank Shiffman说(很久以前,但这是事实):
Java使用字节码而不是使用系统的本机代码具有三个优点:
可移植性:每种计算机都有其独特的指令集。尽管某些处理器包括其前任产品的说明,但通常可以肯定的是,在一种计算机上运行的程序不会在任何其他计算机上运行。添加操作系统提供的服务,每个系统都以其独特的方式对其进行描述,因此您会遇到兼容性问题。通常,如果没有很多工作,就无法为一种系统编写和编译程序并在其他系统上运行它。Java通过在应用程序和实际环境(计算机+操作系统)之间插入其虚拟机来解决此限制。如果将应用程序编译为Java字节码,并且在每种环境中都以相同的方式解释该字节码,则可以编写一个程序,该程序将在支持Java的所有不同平台上运行。(无论如何,这是理论。实际上,等待程序员总是存在一些小的不兼容性。)
安全:Java的优点之一是将其集成到Web中。将使用Java的网页加载到浏览器中,然后Java代码将自动下载并执行。但是,如果代码破坏了文件,无论是通过程序员的恶意还是草率,怎么办?Java通过禁止潜在的危险操作来防止已下载的applet进行任何破坏性的工作。在允许代码运行之前,它会检查是否有绕过安全性的尝试。它验证数据是否被一致使用:将捕获并阻止执行将数据项作为一个整数处理的代码,该代码将在一个阶段将其用作一个整数,然后在以后尝试将其用作指针。(Java语言不允许使用指针算术,因此您无法编写Java代码来完成我们刚刚描述的操作。但是,无法阻止某人使用十六进制编辑器自己编写破坏性字节代码,甚至无法构建Java字节代码汇编器。)通常无法在执行之前分析程序的机器代码并确定它是否有任何不良影响。像编写自我修改代码这样的技巧意味着邪恶的操作甚至可能在以后才存在。但是Java字节代码是为这种验证而设计的:它没有恶意程序员用来隐藏攻击的指令。像编写自我修改代码这样的技巧意味着邪恶的操作甚至可能在以后才存在。但是Java字节代码是为这种验证而设计的:它没有恶意程序员用来隐藏攻击的指令。像编写自我修改代码这样的技巧意味着邪恶的操作甚至可能在以后才存在。但是Java字节代码是为这种验证而设计的:它没有恶意程序员用来隐藏攻击的指令。
尺寸:在微处理器领域,RISC通常优于CISC。最好有一个小的指令集并使用许多快速指令来完成一项工作,而不是将许多复杂的操作实现为单个指令。RISC设计需要较少的芯片门来实现其指令,从而为流水线和其他技术留出更多空间以使每条指令更快。但是,在口译员中,这都不重要。如果要为case语句的switch语句实现一条指令,该指令的长度取决于case子句的数量,则没有理由不这样做。实际上,复杂的指令集对于基于网络的语言是一个优势:这意味着同一程序将更小(更少的指令,更复杂),
因此,在考虑字节码与本机代码时,请考虑在可移植性,安全性,大小和执行速度之间进行哪些权衡。如果速度是唯一重要的因素,请本地化。如果其他任何一个更重要,请使用字节码。
我还要补充一点,对于每个发行版维护一系列以相同代码库为基础的操作系统和面向体系结构的编译可能会变得非常乏味。在多个平台上使用相同的Java字节码并使其“正常工作”是一个巨大的胜利。
以上是 字节码比本地代码有什么优势? 的全部内容, 来源链接: utcz.com/qa/399574.html