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子句的数量,则没有理由不这样做。实际上,复杂的指令集对于基于Web的语言是一个优势:这意味着同一程序将更小(更少的指令,更复杂),
因此,在考虑字节码与本机代码时,请考虑在可移植性,安全性,大小和执行速度之间进行哪些权衡。如果速度是唯一重要的因素,请本地化。如果其他任何一个更重要,请使用字节码。
我还要补充一点,对于每个发行版维护一系列以相同代码库为基础的 *** 作系统和面向体系结构的编译可能会变得非常乏味。在多个平台上使用相同的Java字节码并使它“正常工作”是一个巨大的胜利。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)