为什么字节码可能比本机代码运行得更快[关闭]

2024-01-09

Java 很慢。

这不仅仅是一个“都市传说”,它似乎是一个事实。由于延迟,您不将其用于实时编码,也不将其用于集群/并行计算。那里有数千个基准测试,特别是“Java vs C# vs C++”。

http://benchmarksgame.alioth.debian.org/ http://benchmarksgame.alioth.debian.org/

根据上述网站,不仅 Java 的性能几乎与 C 一样好(远远低于其他语言),而且 Scala 和 Clojure(两种运行在 JVM 上的函数式语言)都比 OCaml、Erlang 具有更好的性能。

而且还有很多“Java 比 X 更快”的说法(例如,这里有一个关于 SO 的问题:Java 运行时性能与本机 C/C++ 代码比较? https://stackoverflow.com/questions/1984856/java-runtime-performance-vs-native-c-c-code).

因此,在某些情况下,Java 似乎很快。有人可以解释为什么吗?

为什么在某些情况下,考虑到动态代码(Scala、Clojure)和垃圾回收,字节码可能比本机代码运行得更快?既然速度快了,为什么还有延迟呢?

这似乎是一个矛盾,有人能解释一下吗?


James Gosling 在《编程大师》一书中解释道:

James: 确切地。这些天我们 击败真正优秀的 C 和 C++ 编译器几乎总是如此。当你 进入动态编译器,你得到 编译器的两个优点 在最后一刻奔跑。一 你确切知道什么芯片组吗 你正在继续奔跑。很多次当 人们正在编译一段C 代码,他们必须编译它才能运行 类似于通用 x86 建筑学。几乎没有一个 你得到的二进制文件特别好 为其中任何一个进行调整。你下载 Mozilla 的最新版本,它会 几乎可以在任何 Intel 上运行 架构CPU。还蛮多的 一个 Linux 二进制文件。很一般, 它是用 GCC 编译的,即 不是一个很好的C编译器。

当 HotSpot 运行时,它确切地知道 你正在运行什么芯片组。它 确切地知道缓存是如何工作的。它 确切地知道内存层次结构 作品。它确切地知道所有 CPU 中的管道互锁工作。 它知道什么指令集 该芯片具有扩展功能。它 精确优化什么机器 轮到你了。然后是另一半 是它实际上看到了 应用程序在运行时。是可以的 有统计数据知道哪些 事情很重要。它能够 C 编译器可以内联的东西 永远不会做。得到的东西 Java 世界中的内联非常漂亮 惊人的。然后你继续 存储管理的工作方式 现代垃圾收集器。与一个 现代垃圾收集器、存储 分配速度极快。

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

为什么字节码可能比本机代码运行得更快[关闭] 的相关文章

  • 如何将 JSpinner 的值设置为特定日期

    我有一个JSpinner我添加到JPanel我想将其时间设置为 GregorianCalendar calendar JSpinner spinner new JSpinner spinner setModel model pom add
  • JavaFX 2.0 FXML 子窗口

    经过多次搜索我发现了这个问题如何创建 javafx 2 0 应用程序 MDI https stackoverflow com questions 10915388 how to create a javafx 2 0 application
  • Java:线程“主”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:

    我是初学者 谁能帮我弄清楚我们在做什么 我正在尝试读取字符串并将字符串的每个字符存储在数组中 import java util Scanner public class CoreMainDigitExtractor static Scann
  • 在 Java 中从 SOAPMessage 获取原始 XML

    我已经在 J AX WS 中设置了 SOAP WebServiceProvider 但我无法弄清楚如何从 SOAPMessage 或任何 Node 对象获取原始 XML 下面是我现在获得的代码示例 以及我试图获取 XML 的位置 WebSe
  • JTextField 和 JTextArea

    JTextField 和 JTextArea 有什么不同 是否可以在一个班级中使用这两个班级 总之 JTextField 是单行文本字段 而 JTextArea 可以跨越多行 文档中清楚地解释了这些差异 文本区 http docs orac
  • Android WebView文件上传

    我正在开发一个 Android 应用程序 基本上它是一个WebView和一个进度条 Facebook 的移动网站 m facebook com 已加载到WebView 当我单击 选择文件 按钮上传图像时 没有任何反应 我已经尝试了所有的解决
  • 需要正则表达式帮助

    我正在尝试替换两次或多次出现的 br like br br br 标签与两个一起 br br 具有以下模式 Pattern brTagPattern Pattern compile lt s br s s gt s 2 Pattern CA
  • 当 JMS Prod 位于辅助 POJO 类中时,如何在事务中包含 JMS Producer

    简短的问题 有没有办法强制无状态 EJB 调用的 POJO 存在于 EJB 的上下文中 以便事务和资源注入可以在 POJO 中工作 具体来说 在我想要做的事情的上下文中 如何在 EJB 的事务中包含 POJO JMS 生产者 该生产者在调用
  • 在 Junit 测试中使用 ReflectionTestUtils.setField()

    我是 JUnittesting 的新手 所以我有一个问题 谁能告诉我为什么我们使用ReflectionTestUtils setField 在我们的 Junit 测试示例中 正如评论中提到的 java 文档很好地解释了用法 但我还想给你们举
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • LocalDate 减去 period 得到错误的结果

    LocalDate减去一个Period 如 28年1个月27天 得到错误的结果 但减去一个Period 只有天单位 如 10282 天 得到正确的结果 有什么需要注意的吗 public static void main String arg
  • 将现有 eclipse 项目导出到 war 文件时出现“模块名称无效”

    我正在尝试将现有 Eclipse 项目导出到 war 文件 但无论我在 WAR Export 对话框页面中输入什么 系统总是返回 模块名称无效 我不知道如何解决这个问题 谢谢您的帮助 我有同样的问题 我修复了它 请按照以下步骤操作 您可以创
  • 是否有最新的 Facebook Java SDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好像没找到最近更新的 如果没有 是否有一个好的 Java 库来执行与 Facebook 的 API 交
  • Java和手动执行finalize

    如果我打电话finalize 在我的程序代码中的一个对象上 JVM当垃圾收集器处理这个对象时仍然再次运行该方法吗 这是一个大概的例子 MyObject m new MyObject m finalize m null System gc 是
  • Java String ReplaceAll 方法给出非法重复错误?

    我有一个字符串 当我尝试运行时replaceAll方法 我收到这个奇怪的错误 String str something op str str replaceAll o n it works fine str str replaceAll n
  • Java 中的微分方程

    我正在尝试用java创建一个简单的SIR流行病模型模拟程序 基本上 SIR 由三个微分方程组定义 S t l t S t I t l t S t g t I t R t g t I t S 易感人群 I 感染人群 R 康复人群 l t c
  • 为什么我不能将 Collection 转换为 Collection>

    问题的关键是 为什么这会导致编译时错误 List
  • 如何使用注释处理 Hibernate 和 Spring 中的连接查询?

    我正在使用 Spring 和 Hibernate 以及 MySQL 开发应用程序 我是 Hibernate 新手 完成了基本任务 现在我需要在选择查询中应用联接以使用注释从多个表中获取数据 我已经搜索过但仍然没有任何想法 这是我的数据库表和
  • Android Google 地图无法在当前主题中找到样式“mapViewStyle”

    添加谷歌地图视图时 我扩展了MapView 使用xml编辑器将其添加到活动中 并将我的谷歌地图api密钥手动添加到布局xml文件中 我的权限在清单文件中允许互联网 我想知道的是 在 xml 编辑器中 我收到错误 无法在当前主题中找到样式 m
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐

  • 在 MongoDB 中的 Angular.js 中显示图像

    我最近打开了另一个关于如何使用 node js mongoose 在 mongodb 数据库中存储图像的线程 使用猫鼬保存图像 https stackoverflow com questions 27353346 saving image
  • Django:通过“field__isnull=True”或“field=None”过滤查询集?

    我必须通过动态值 可以是 无 过滤查询集 我可以简单地写 filtered queryset queryset filter field value 或者我应该检查 无 if value is None filtered queryset
  • 设置 Cygwin + Android NDK + cocos2Dx 以与 Eclipse 配合使用

    我正在关注该网站的教程 通过游戏应用货币化 作者 Todd Perkins http www lynda com Android tutorials Understanding downloading Cocos2d x 107169 12
  • BASH 数组索引减去最后一个数组

    这是一个困扰我的问题 我需要从用户输入中读取版本号 并且我想使用存储版本号的数组的长度创建一个 菜单 然而 BASH 的神秘语法在这里对我没有帮助 echo VERSIONS 2 0 10 1 2 0 7 1 2 0 7 1 2 0 7 1
  • 数据表:尝试以 csv 格式获取每个表行的选定单选按钮值

    我正在使用 jquery 数据表插件 我想做的是以 CSV 逗号分隔值 格式获取所有选定的单选按钮值 由于记录太多 所以使用分页 当我选择第一页上的单选按钮时 我可以获取 CSV 中所有选定的单选按钮值 运行良好 当我转到第二页并选择单选按
  • 使用 nginx 记录已解析的请求

    如何为 nginx 设置自定义日志格式 以便解析请求并单独记录其各部分 我们提供图片文件来统计邮件的打开次数 图片的 URL 有所不同 但遵循以下规则 http www server com counter XXXXX YYYYY dail
  • GitHub 操作:致命:无法读取“https://github.com”的用户名:设备未配置

    我试图让git clone在私人存储库上使用 Github Action 但我不确定应该如何配置它以使用 SSH 连接到 GitHub 顺便说一句 它是 macOS 运行程序 此时此刻 actions checkout工作正常 但是当我打电
  • 通过互联网传输数据的最简单方法,Python

    我有两台电脑 都连接到互联网 我想在它们之间传输一些基本数据 字符串 整数 浮点数 我是网络新手 所以我正在寻找最简单的方法来做到这一点 我需要哪些模块来做到这一点 两个系统都将运行 Windows 7 只要它不是异步的 同时发送和接收 您
  • VBscript 的递归问题

    我正在尝试在 vbscript 中实现一些递归 Function largest prime factor ByVal num For i 2 to num 2 If num mod i 0 Then this number is not
  • 如何获取特定用户的 Windows“特殊文件夹”路径?

    在服务内部 确定特定用户的特殊文件夹路径 例如 我的文档 的最佳方法是什么 SHGetFolderPath允许您传递令牌 因此我假设有某种方法可以模拟您感兴趣的文件夹的用户 有没有办法仅根据用户名来执行此操作 如果没有 用户帐户所需的最少信
  • 多行“ReplacementSpan”绘图问题

    只要文本不太长 我的自定义替换跨度就可以工作 但一旦文本长于一行 跨度绘图就会完全崩溃 我的理解是draw 在这种情况下被调用两次导致跨度绘制两次 无法区分第二个绘制调用和第一个绘制调用 从而使您可以控制绘制内容和绘制位置 start an
  • 如何使用 PlayFramework 压缩 html

    为了提高 Scala 表单的可读性 我经常使用缩进和换行 但是 当我在 play 应用程序启动并运行时验证 HTML 时 我看到很多空格和不必要的换行符 有什么理由压缩此 HTML 而不 使我的 scala 模板不可读 Thanks 正如另
  • 无法找到 Android SDK

    我已经有了安卓工作室 https en wikipedia org wiki Android Studio并安装了 Android SDK 后来我添加了 Flutter 和 Flutter SDK 这是我的问题 当我跑步时 flutter
  • 从最新的 rss 中排序日期

    我应该如何对日期进行排序 最新的在顶部 目前 日期尚未排序 下面是我的 JSFiddle http jsfiddle net qoLg6dnu http jsfiddle net qoLg6dnu document ready functi
  • android api与谷歌地图显示网格

    我正在创建一个使用谷歌地图 API v2 的 Android 应用程序 我相信我已经按照谷歌教程所述完成了所有操作 但我仍然只得到谷歌地图网格 没有地图 我使用 keystore debug 的 SHA1 创建了一个调试密钥 以下是我的设置
  • 如何编译加载到字符串中的erlang代码?

    我有一个生成的字符串 其中包含 erlang 模块的代码 有没有办法直接从字符串编译生成的模块 或者有没有办法将字符串转换为所需的格式compile forms 1 或者我必须先将其保存到临时文件中 然后使用compile file 1 或
  • fork() 中的写时复制如何处理多个 fork?

    根据维基百科 这可能是错误的 当发出 fork 系统调用时 会创建与父进程对应的所有页面的副本 并由操作系统为子进程加载到单独的内存位置 但在某些情况下不需要这样做 考虑当子进程执行 exec 系统调用 用于执行 C 程序中的任何可执行文件
  • 无法在 Next.js 13 和 Sanity v3 中使用 React 语法荧光笔

    您好 我的项目在使用 Sanity v3 和 React Syntax Highlighter 时遇到问题 当我使用Refactor用于在浏览器中显示我的代码的库 它可以通过查看教程来工作理智输入代码 https www sanity io
  • Tinymce - 插入 html 代码

    如果有人可以帮助我解决这个问题 我将不胜感激 我已经尝试解决了几天 但没有成功 我制作了将图像插入代码的自定义按钮 这是文本版本 a href Insert Image a 问题是我不允许使用引号 所以我必须使用 alt Some valu
  • 为什么字节码可能比本机代码运行得更快[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi