JVM什么时候使用内在函数

2023-11-29

为什么某些代码模式在 JVM 内部类中出现时会变成内部函数,而从我自己的类中调用时却不会。

例子:

bitCount 函数,当从 Integer.bitCount(i) 内部调用时,将转换为内在函数。但是当复制到我的类中然后调用时,执行时间会更长。

Compare

Integer.bitCount(i) 
MyClass.bitCount(i) 


public static int bitCount(int i) {
    // HD, Figure 5-2
    i = i - ((i >>> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
    i = (i + (i >>> 4)) & 0x0f0f0f0f;
    i = i + (i >>> 8);
    i = i + (i >>> 16);
    return i & 0x3f;
}

答案很简单:以这种方式定义内在函数是因为存在一种更快、本机的方式来获取函数的结果,并且由于指定的映射而可以应用它。

这根本与编译无关。Integer.bitCount是特殊的,因为实现被标记为可以用本机 asm 指令替换POPCNT。基本上这个本机指令是在使用时使用的Integer.bitCount函数(如果 CPU 支持该指令),当您声明自己的函数副本时,将使用正常的实现。

为什么JVM能够识别出可以优化的函数?因为它是硬编码的某处在 JDK 中,这与代码的相似性无关。

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

JVM什么时候使用内在函数 的相关文章

  • 如何使用 Java 中的 Web 服务(例如 Axis2)发送复杂对象的数组或集合?

    我对 SOAP Web 服务还比较陌生 虽然我完成了一些较小的 Web 服务项目 但我偶然从来不需要返回 或用作参数 复杂 对象的数组或集合 当我尝试这样做时 根据我的 SOAP 绑定风格 我会得到不同的奇怪行为 当我使用RPC 文字 我可
  • Hibernate注解放置问题

    我有一个我认为很简单的问题 我见过两种方式的例子 问题是 为什么我不能将注释放在字段上 让我举一个例子 Entity Table name widget public class Widget private Integer id Id G
  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • 如何使用 Java 处理 Selenium WebDriver 中的新窗口?

    这是我的代码 driver findElement By id ImageButton5 click Thread sleep 3000 String winHandleBefore driver getWindowHandle drive
  • 比较两个文本文件的最快方法是什么,不将移动的行视为不同

    我有两个文件非常大 每个文件有 50000 行 我需要比较这两个文件并识别更改 然而 问题是如果一条线出现在不同的位置 它不应该显示为不同的 例如 考虑这个文件A txt xxxxx yyyyy zzzzz 文件B txt zzzzz xx
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • wait() 在游戏中如何工作?

    在 playframework 的文档中here http www playframework org documentation 1 2 1 asynchronous已写 public static void loopWithoutBlo
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话

随机推荐

  • Android:地址(来自地理编码)有固定格式吗?

    我需要确定地理位置的地址 因此我使用了 GeoCoder 和 Address 我尝试打印一个 Address 对象并得到以下结果 出于隐私原因 我使用了一些假数据 但我在设备上收到的数据是真实的 Address addressLines 0
  • 使用 XPath 单击超文本链接

    如果这是一个愚蠢的问题 我很抱歉 我是 Selenium 的新手 我正在测试一个网页 其中的表格中有一些超文本链接 HTML 看起来像这样 table thead tr td b History b td td b Attributes b
  • 错误:您必须在 transaction() 回调中返回 Promise。在 transaction.begin.then 处

    这是我的代码片段 await firestore runTransaction t gt t get docRef then docRef gt logger info entering transaction if docRef exis
  • Docker 与新的名称服务器

    我如何添加新的名称服务器 etc resolv conf 泊坞窗文件 在我的 dockerfile 上我使用 FROM ubuntu 14 04 RUN echo nameserver 10 111 122 1 gt gt etc reso
  • Git - 如何在克隆后自动忽略文件?

    我想知道是否有办法将文件包含在存储库中 但在用户克隆存储库后它会被自动忽略 这对于配置文件来说非常有用 一旦克隆了存储库 您只需编辑它 并且不必记住将其放入 gitignore 中 一种方法是运行git update index assum
  • 递归文件搜索 (PHP)

    我正在尝试使用递归搜索返回指定目录中的文件 我成功地实现了这一点 但是我想添加几行代码 以允许我指定我想要返回的某些扩展名 例如 仅返回目录中的 jpg 文件 这是我的代码 请让我知道我可以在上面的代码中添加什么来实现这一点 谢谢
  • v-model 仅在生产中抛出 ReferenceError

    我在 Vue 中有以下视图
  • 同一页面中具有相同广告尺寸的多个 GPT 广告不起作用

    我的页面上有两个 GPT 广告 如果两个广告的尺寸不同 则广告将显示在页面中 下面的代码工作正常 googletag defineSlot 123 test 728 90 div gpt ad 123456789 0 addService
  • 在Postman中,如何使用集合运行器发布二进制文件

    我正在使用 Postman Collection Runner 自动执行一系列 API 调用 在其中一个 API 调用中 我需要提交一个二进制文件作为 POST 的正文 设置 Collection Runner 时 我看到如何选择文件 但我
  • 解决 Cocoa 中的 EXC_BAD_ACCESS 问题?

    嘿 我在可可中有以下方法 void startUploadWithContainerName NSString containerName Make an object of NSFileManager and Fetch an array
  • Rails:Webpacker 4.2 在 /app/public/packs/manifest.json 中找不到应用程序

    我有点难住了 我的本地 Rails 应用程序与 webpacker 4 2 和 React 配合得很好 但是部署到生产环境时给了我美妙的效果can t find application in app public packs manifes
  • 即使没有添加记录,INSERT IGNORE 也会增加自动增量计数器?

    In MySQL I used INSERT IGNORE语句将行插入到表中 因为一列是UNIQUE 某些行未插入 因为它们已经存在 执行该语句后 我注意到自动增量列在行之间缺少一些数字 后来我意识到这是由于被忽略且未添加的行而发生的 是否
  • 为什么 Intent.ACTION_SENDTO 包含应用程序作为选项

    我的导航抽屉包含一个通过电子邮件联系开发人员的选项 为此 我根据文档包含了代码 但是 当单击 联系开发人员 时 显示的选项包括我的应用程序 该应用程序不支持电子邮件 我在网上搜索过这个问题 但没有找到任何相关内容 如何将用户的选项仅限于电子
  • Magento 删除默认商店视图的商店代码

    我有 Magento 多语言商店 我需要将商店代码添加到 url 在这条路径中System gt Configuration gt Web gt Url Option gt Add Store Code to Urls我已经转了ON 然后我
  • Flutter 异步表单验证

    我和这个问题的发帖者有同样的问题 flutter 异步验证表单 然而 我在实现这一点和理解验证是如何工作时遇到了困难 首先 这段代码返回什么 这会返回布尔值吗 Future checkUser async var user await Fi
  • G1算法中的记忆集有什么用?

    我刚刚读了一些关于G1算法的博客 记忆集的用法对我来说很困惑 我的想法是这样的 既然我们可以使用 DFS 遍历 GC Roots 中的每个引用 为什么我们需要记住集呢 因为所有的博客都说我们使用remembered set的原因是我们不需要
  • 如何让Spring Boot中的字段为空?

    我正在尝试对电话号码进行验证 我们可以允许它为空 但每次输入时都必须是 10 个字符的大小 这是我的代码 Size max 10 min 10 message mobile no should be of 10 digits private
  • 将不同源位置的 xml 文档图像复制到单个输出目录中

    我有一个 xml 文档 其中使用 xinclude 来访问其他几个 xml 文件
  • 如何在 Excel 的 VBA 中使 ADODB.Connection 持久化?

    我有一个 Excel 电子表格 需要显示 SQL 数据库中的数据 我将慢速查询的结果存储在临时表中 并希望能够重复访问这些结果 而不必重新运行慢速查询 我正在 VBA 中使用 ADODB Connection 连接到我们的 SQL 数据库并
  • JVM什么时候使用内在函数

    为什么某些代码模式在 JVM 内部类中出现时会变成内部函数 而从我自己的类中调用时却不会 例子 bitCount 函数 当从 Integer bitCount i 内部调用时 将转换为内在函数 但是当复制到我的类中然后调用时 执行时间会更长