似乎用字节码可以做的任何事情都可以在本机代码中轻松且更快地完成。理论上,您甚至可以通过以字节码形式分发程序和库,然后在安装时编译为本机代码,而不是对其进行 JIT 来保持平台和语言的独立性。
所以一般来说,什么时候你想执行字节码而不是本机?
SGI 的汉克·希夫曼 (Hank Shiffman) 说过(很久以前,但直到现在都是如此):
Java的三大优势
使用字节码而不是去
系统的本机代码:
可移植性:每种计算机都有其独特的指令
放。虽然某些处理器包括
给前辈的指示,
一般来说,一个程序是正确的
在一种计算机上运行
不会在任何其他上运行。添加在
运营商提供的服务
系统,每个系统都在
它自己独特的方式,你有一个
兼容性问题。一般来说,你
无法编写和编译程序
一种系统并在任何系统上运行
其他无需太多工作。 Java获取
通过插入来绕过这个限制
它的虚拟机之间
应用与真实环境
(计算机+操作系统)。如果
应用程序被编译为Java字节
代码和字节码被解释
在每个环境中都以同样的方式
你可以编写一个程序
将适用于所有不同的
支持 Java 的平台。
(无论如何,这就是理论。在
实践总有小事
不兼容性正在等待
程序员。)
Security:Java 的优点之一是它与 Web 的集成。加载
一个使用 Java 的网页
浏览器和Java代码是
自动下载并执行。
但是如果代码破坏了文件怎么办?
无论是出于恶意还是马虎
就程序员而言?爪哇
阻止下载的小程序执行
任何破坏性的事物都不允许
潜在危险的操作。
在允许代码运行之前
检查它是否试图绕过
安全。它验证数据是
一致使用:编码
将数据项作为整数进行操作
在某个阶段然后尝试使用它
作为指针稍后将被捕获并且
阻止执行。 (爪哇
语言不允许指针
算术,所以你不能写Java
执行我们刚刚描述的操作的代码。
然而,没有什么可以阻止
有人写了破坏性的字节
使用十六进制对自己进行编码
编辑器甚至构建 Java 字节
代码汇编器。)通常不是
可以分析程序的
执行前的机器代码和
确定它是否执行任何操作
坏的。像写作一样的技巧
自修改代码意味着邪恶
操作甚至可能不存在,直到
之后。但是Java字节码是被设计出来的
对于这种验证:
没有说明
恶意程序员会用来隐藏
他们的攻击。
Size:在微处理器领域,RISC 通常更受欢迎
超过 CISC。最好有一个小的
指令集多且使用快
指示做某事而不是拥有
许多复杂的操作实现为
单一指令。 RISC设计
芯片上需要更少的门
执行他们的指示,允许
为管道和其他设备提供更多空间
制作每条指令的技巧
快点。然而,在翻译中,
这些都不重要。如果你想
执行单个指令
带变量的 switch 语句
长度取决于案例数量
条款,没有理由不这样做
所以。事实上,一个复杂的指令集
是基于网络的一个优势
语言:意思是一样的
程序会更小(更少
更复杂的指令),
这意味着转移时间更短
通过我们的限速网络。
因此,在考虑字节码与本机代码时,请考虑在可移植性、安全性、大小和执行速度之间进行哪些权衡。如果速度是唯一重要的因素,那就选择原生。如果其他任何一个更重要,请选择字节码。
我还要补充一点,为每个版本维护相同代码库的一系列操作系统和针对体系结构的编译可能会变得非常乏味。在多个平台上使用相同的 Java 字节码并让它“正常工作”是一个巨大的胜利。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)