一个好的 Java VM 中方法调用的开销是多少?

2024-05-04

有人可以提供反汇编的机器代码汇编程序列表吗?

我的意思是,与 C 中的普通函数调用相比,肯定有一些开销。

VM 需要跟踪调用以查找热点,并且当它使用编译代码时,如果新加载的类需要重新编译,它需要提供动态更改编译方法的方法。

我想某处也有返回堆栈溢出检查。

编辑:我想我应该提到,我不是一个java程序员,而是一个编译器编写者,并且想找出为什么java应用程序如此慢,而java微基准测试与本机编译代码相当。因此,查看一些细节对我来说很重要,即使它们只需要几十纳秒和一些额外的说明。


Java不会直接编译为机器代码,它会编译为字节码,然后在运行时解释或编译为机器代码——我不知道如何在运行时获取机器代码,我只是将其想象为如此巨大的质量移位、更改字节最终会快速可靠地执行该死的。

一个小的方法调用应该在运行时完全编译出来。如果可以解析或忽略足够的引用,即使是大型方法调用也可以由 VM 编写为内联机器代码。

使用 Final 可以提供很大帮助,因为它可以向虚拟机提供有关如何进一步优化的提示。

由于方法调用实际上可以完全编译出来,并且最多具有最小的成本 - 你真的不应该担心它。只要尽力编码,并在性能规范失败时担心性能问题(此时,局部优化比尝试消除代码中的方法调用、破坏每个相关人员的代码库要好得多)。

请注意,由于运行时分析,在某些非常罕见的情况下,它实际上可能比 C 中的类似代码更快(C 编译器不会在运行时分析并为您手动优化代码,您必须自己完成所有这些工作) 。

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

一个好的 Java VM 中方法调用的开销是多少? 的相关文章

随机推荐

  • 使用回溯(而不是 DFS)背后的直觉

    我正在解决单词搜索 https leetcode com problems word search description LeetCode com 上的问题 给定一个 2D 板和一个单词 查找该单词是否存在于网格中 该单词可以由顺序相邻单
  • 使用 swift 在 WKWebView 上显示活动指示器

    我正在处理以下代码 并尝试在页面加载时在视图中显示活动指示器 我尝试实施WKNavigationDelegate方法 但我失败了 因为没有任何显示 对于如何解决这个问题 有任何的建议吗 我没有设置 SupportWebView 视图dele
  • 在哪里存储字符串值?在 strings.xml 中还是在常量类中?

    在android中 我们可以将字符串值存储在strings xml文件中或某些常量类中作为静态最终变量 在某些情况下是否有理由选择一个而不是另一个 简而言之 代码中使用的值 始终使用常量类 优点 代码保持集成 并且您的包可以在其他项目 上下
  • CPU缓存:两个地址之间的距离是否需要小于8字节才能具有缓存优势?

    这似乎是一个奇怪的问题 假设缓存行的大小为 64 字节 此外 假设 L1 L2 L3 具有相同的缓存行大小 this https stackoverflow com a 15333156 8385554帖子说英特尔酷睿 i7 就是这种情况
  • 移动列表中特定元素的简单函数

    我是 Haskell 的新手 我正在尝试弄清楚如何创建一个函数 shift Eq a gt a gt a gt Int gt a shift x h t z 输入 一个通用列表和一个相同类型的元素 x 前提条件 元素x存在于列表中 Outp
  • 使用 Mockito 对 Runnable 进行单元测试

    我有这样的代码 我想为其编写单元测试 public class TestClass private final Executor executor private final Handler handler TestClass Execut
  • Jetpack Compose 中的自定义 Toast

    我想要在 Jetpack Compose 中自定义 Toast 但没有找到任何与此相关的有用文档 如有任何帮助 我们将不胜感激 自定义 Toast 已被弃用 取而代之的是 SnackBar 因此 他们大多不会获得 Jetpack Compo
  • PL/pgSQL 中的 EXPLAIN ANALYZE 给出错误:“查询没有结果数据的目的地”

    我试图理解 PL pgSQL 函数中 select 语句的查询计划 但我不断收到错误 我的问题 如何获取查询计划 以下是重现该问题的简单案例 相关表名为 test table CREATE TABLE test table name cha
  • 将 erlang shell 作为守护进程/服务运行

    显然 我有一个在 Erlang shell 中运行的 Erlang 程序 我想监视它 这就是我要的 当机器启动时 Erlang shell 应该随之启动 并且在 shell 中运行的程序也应该随之启动 如果 Erlang shell 由于某
  • ActionDispatch::Http::UploadedFile.content_type 在 Rspec 测试中未初始化

    背景 我有一个Book模型与一个cover file通过我的 Rails 控制器之一使用上传的文件设置的属性 我正在使用 Rails v4 0 4 Goal 我想测试是否仅保存具有特定内容类型的文件 我计划创建 Rspec 测试示例Acti
  • Lucene外来字符问题

    我在使用 Zend Lucene 和 等外来字符时遇到了一些严重的问题 这些问题在创建索引和查询索引时都会出现 我已经尝试过 iso 8859 1 和 utf 8 ISO 8859 1 不起作用的查询看起来像 area sk ne 使用 Z
  • 在长时间运行期间发送 Windows 消息?

    我在运行的大型操作中收到以下消息 CLR 无法转换 从 COM 上下文 0x1fe458 到 COM 上下文 0x1fe5c8 60 秒 这 拥有目的地的线程 上下文 公寓最有可能 要么进行非抽水等待 要么 处理很长时间的运行 无需泵送 W
  • 从后台线程更新可观察列表的正确方法

    我正在尝试遵循 MVC 进行测试项目 因此我的模型应该完全独立于我的观点 但是我不确定应该如何更新在后台线程中更新的可观察列表 正在给出有关上传的字符串 文件 以便消息显示在 UI 上的 ListView 中 我正在使用 JavaFX 并尝
  • 优化Python:大数组、内存问题

    我在运行 python numypy 代码时遇到速度问题 我不知道如何让它更快 也许其他人 假设有一个表面有两个三角剖分 一个是细三角剖分 fine 有 M 个点 一个是粗剖分 有 N 个点 此外 还有每个点的粗网格数据 N 个浮点数 我正
  • 在 Spring 5 Webflux 中启用 CORS?

    如何启用CORS在 Spring 5 Webflux 项目中 我找不到任何合适的文档 我使用这个自定义过滤器取得了成功 import org springframework context annotation Bean import or
  • 在两个应用程序之间通过 url 方案快速传递数据?

    有两个测试应用程序称为发送者和接收者 他们通过 UrlScheme 相互通信 我想从发送者发送一个字符串到接收者 这可能吗 关于字符串的详细信息 我都在发送者和接收者中创建文本字段 我会在发送者文本字段上发送一些字符串 当我单击按钮时 字符
  • '||=' 运算符在 ruby​​ 中起什么作用? [复制]

    这个问题在这里已经有答案了 可能的重复 在 Ruby 中是什么意思 https stackoverflow com questions 995593 what does mean in ruby 我是红宝石新手 我看到这里的答案之一使用了它
  • 跨多个子域的 WebAuthn

    我正在尝试在我的网站上设置 WebAuthn 身份验证流程 但遇到了问题 我希望我的用户能够在主网站 www domain com 上注册他们的设备 以便可以通过用户设置轻松访问 身份验证本身通过 IdP sso domain com 在不
  • C 程序的“编译器正确”命令

    这是关于中提到的编译步骤Linux 期刊文章 https www linuxjournal com article 6463 C 程序是使用编译的cpp cc1 as and ld该文章中的命令 我能够执行这些步骤cpp as and ld
  • 一个好的 Java VM 中方法调用的开销是多少?

    有人可以提供反汇编的机器代码汇编程序列表吗 我的意思是 与 C 中的普通函数调用相比 肯定有一些开销 VM 需要跟踪调用以查找热点 并且当它使用编译代码时 如果新加载的类需要重新编译 它需要提供动态更改编译方法的方法 我想某处也有返回堆栈溢