字节码相对于本机代码有哪些优点? [关闭]

2024-05-04

似乎用字节码可以做的任何事情都可以在本机代码中轻松且更快地完成。理论上,您甚至可以通过以字节码形式分发程序和库,然后在安装时编译为本机代码,而不是对其进行 JIT 来保持平台和语言的独立性。

所以一般来说,什么时候你想执行字节码而不是本机?


SGI 的汉克·希夫曼 (Hank Shiffman) 说过(很久以前,但直到现在都是如此):

Java的三大优势 使用字节码而不是去 系统的本机代码:

  1. 可移植性:每种计算机都有其独特的指令 放。虽然某些处理器包括 给前辈的指示, 一般来说,一个程序是正确的 在一种计算机上运行 不会在任何其他上运行。添加在 运营商提供的服务 系统,每个系统都在 它自己独特的方式,你有一个 兼容性问题。一般来说,你 无法编写和编译程序 一种系统并在任何系统上运行 其他无需太多工作。 Java获取 通过插入来绕过这个限制 它的虚拟机之间 应用与真实环境 (计算机+操作系统)。如果 应用程序被编译为Java字节 代码和字节码被解释 在每个环境中都以同样的方式 你可以编写一个程序 将适用于所有不同的 支持 Java 的平台。 (无论如何,这就是理论。在 实践总有小事 不兼容性正在等待 程序员。)

  2. Security:Java 的优点之一是它与 Web 的集成。加载 一个使用 Java 的网页 浏览器和Java代码是 自动下载并执行。 但是如果代码破坏了文件怎么办? 无论是出于恶意还是马虎 就程序员而言?爪哇 阻止下载的小程序执行 任何破坏性的事物都不允许 潜在危险的操作。 在允许代码运行之前 检查它是否试图绕过 安全。它验证数据是 一致使用:编码 将数据项作为整数进行操作 在某个阶段然后尝试使用它 作为指针稍后将被捕获并且 阻止执行。 (爪哇 语言不允许指针 算术,所以你不能写Java 执行我们刚刚描述的操作的代码。 然而,没有什么可以阻止 有人写了破坏性的字节 使用十六进制对自己进行编码 编辑器甚至构建 Java 字节 代码汇编器。)通常不是 可以分析程序的 执行前的机器代码和 确定它是否执行任何操作 坏的。像写作一样的技巧 自修改代码意味着邪恶 操作甚至可能不存在,直到 之后。但是Java字节码是被设计出来的 对于这种验证: 没有说明 恶意程序员会用来隐藏 他们的攻击。

  3. Size:在微处理器领域,RISC 通常更受欢迎 超过 CISC。最好有一个小的 指令集多且使用快 指示做某事而不是拥有 许多复杂的操作实现为 单一指令。 RISC设计 芯片上需要更少的门 执行他们的指示,允许 为管道和其他设备提供更多空间 制作每条指令的技巧 快点。然而,在翻译中, 这些都不重要。如果你想 执行单个指令 带变量的 switch 语句 长度取决于案例数量 条款,没有理由不这样做 所以。事实上,一个复杂的指令集 是基于网络的一个优势 语言:意思是一样的 程序会更小(更少 更复杂的指令), 这意味着转移时间更短 通过我们的限速网络。

因此,在考虑字节码与本机代码时,请考虑在可移植性、安全性、大小和执行速度之间进行哪些权衡。如果速度是唯一重要的因素,那就选择原生。如果其他任何一个更重要,请选择字节码。

我还要补充一点,为每个版本维护相同代码库的一系列操作系统和针对体系结构的编译可能会变得非常乏味。在多个平台上使用相同的 Java 字节码并让它“正常工作”是一个巨大的胜利。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字节码相对于本机代码有哪些优点? [关闭] 的相关文章

  • 160 位 SHA1 哈希值的前 32 位是否可以替代 CRC32 哈希值?

    我正在开发一个 NET 3 5 项目 我需要一个 32 位哈希值 NET 加密类中似乎没有任何方法返回 32 位哈希 MD5 是 128 位 SHA1 是 160 位等 我实现了一个 CRC32 类 但我发现现有的 SHA1 和 MD5 哈
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • 为什么我在 Mac 上看到“java.lang.reflect.InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int)accessibl

    我已经在工作中愉快地构建代码好几天了 但突然我的一个项目 不是全部 失败并出现此错误消息 看看下面的答案吧 我是如何修复它的 起初我用谷歌搜索 看到很多有这个问题的人正在使用 Java 16 但我认为 错误 我正在使用 Java 11 因为
  • .net 中的计时器合并

    Windows 7 引入了计时器合并 提高了能源效率 哪些托管 API 公开了计时器容差 似乎利用此功能的唯一方法是 p invoke设置等待定时器 http msdn microsoft com en us library windows
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • *.tlb 文件在运行时使用过吗?

    我正在开发一个通过 COM 互操作公开一些 NET API 的产品 作为构建的一部分 我们为所有此类程序集生成 tlb 文件 并将它们作为单独 SDK 包的一部分提供 我们的客户可以在我们的产品之上安装 SDK 并创建使用我们的 COM A
  • 我想要一个 Java 阿拉伯语词干分析器

    我正在寻找阿拉伯语的 Java 词干分析器 我找到了一个名为 AraMorph 的库 但它的输出是无法控制的 并且它会形成不需要的单词 还有其他阿拉伯语词干分析器吗 这是新的阿拉伯语词干分析器 Assem 的阿拉伯语轻词干分析器 http
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • 如何将实例变量传递到 Quartz 作业中?

    我想知道如何在 Quartz 中外部传递实例变量 下面是我想写的伪代码 如何将 externalInstance 传递到此作业中 public class SimpleJob implements Job Override public v
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向

随机推荐