当前位置: 首页 > 面试题库 >

JVM什么时候使用内在函数

姚钊
2023-03-14
问题内容

为什么将某些代码模式(当存在于JVM内部类中时)转换为内在函数,而将相同的模式从我自己的类中调用时却不是。

例:

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

比较

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中,有无关相似的代码。



 类似资料:
  • 问题内容: 嗨,我想知道何时才是使用htmlspecialchars()的适当位置。是在将数据插入数据库之前还是从数据库中检索数据时? 问题答案: 仅在将数据回显为HTML时才应调用此方法。 不要将转义的HTML存储在数据库中;它只会使查询更烦人。 数据库应存储您的实际数据,而不是其HTML表示形式。

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。

  • 一般来说,当发现 CPU 的占用率和实际业务应该出现的占用率不相符,或者对 Nginx worker 的资源使用率(CPU,内存,磁盘 IO )出现怀疑的情况下,都可以使用火焰图进行抓取。另外,对 CPU 占用率低、吐吞量低的情况也可以使用火焰图的方式排查程序中是否有阻塞调用导致整个架构的吞吐量低下。 常用的火焰图有三种: lj-lua-stacks.sxx 用于绘制 Lua 代码的火焰图 sam

  • 本文向大家介绍请说说在什么时候用transition?什么时候使用animation?相关面试题,主要包含被问及请说说在什么时候用transition?什么时候使用animation?时的应答技巧和注意事项,需要的朋友参考一下 transition 只能设置起始和结束时的样式,用来较为方便的实现类似flash中两个关键帧之间的补间动画效果。transition一般会和js配合使用。 animati