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

Java:JIT方法内联

马和硕
2023-03-14
问题内容

__Java JIT 何时 内联方法调用?是基于#times调用调用方方法(如果是,该数字是多少?),还是基于其他一些条件(以及那是什么?)?

我已经读过JIT可以内联“最终”方法,但它也可以基于运行时统计信息内联非最终方法,因此想知道触发条件是什么。

我猜答案会根据JVM的实现而有所不同,但是也许所有这些都有共同点吗?


问题答案:

简短的答案是随时随地。

JITC通常会自动内联较小的最终方法或伪最终方法,而无需先收集任何统计信息。这是因为很容易看出,内联实际上节省了代码字节,而不是对调用进行编码(或者至少是近乎“洗”)。

除非统计数据表明值得,否则通常不会内联真正的非最终方法,因为必须以某种方式“保护”内联的非最终方法,以防出现意外的子类。

至于某事物在被JITC或内联之前可能被调用的次数,这是高度可变的,并且甚至在运行的JVM中也可能会有所不同。



 类似资料:
  • 操作步骤: 菜单栏: Refactor —>Inline 快捷键: Mac: option+Command + N

  • 问题内容: 我一直在试图理解真正的含义: 内联函数 在C ++中,是在类声明中定义的成员函数。(2)编译器用该函数的实际代码替换的函数调用。关键字inline可用于提示编译器对成员或非成员函数的主体执行内联扩展。 排队 在编译过程中用函数代码的副本替换函数调用。 例如,它写成类似: 当方法为最终方法时,可以内联。 此处:http : //www.roseindia.net/javatutorial

  • 介绍 我不会告诉你怎么在自己的电脑上去构建、安装一个定制化的 Linux 内核,这样的资料太多了,它们会对你有帮助。本文会告诉你当你在内核源码路径里敲下 make 时会发生什么。 当我刚刚开始学习内核代码时,Makefile 是我打开的第一个文件,这个文件看起来真令人害怕 :)。那时候这个 Makefile 还只包含了 1591 行代码,当我开始写本文时,内核已经是 4.2.0 的第三个候选版本

  • 问题内容: 请看下面的代码: 在上面的代码中,在方法ModifyList()中声明的匿名内部类的实例能够访问传递给该方法的参数。AFAIK Java为内部类创建一个单独的字节码文件。 谁能解释一下Java在字节码级别上如何处理这些局部变量绑定?我的意思是,Java如何精确跟踪对作为参数传递给该方法的对象的引用? 任何帮助将不胜感激! [抱歉我的英语不好! 如果您理解我的问题,请编辑这篇文章,并删除

  • 让我们有一个名为myClass的小类。我很感兴趣的是,当方法内联或不内联时,如何看待. ash的差异。我制作了两个程序,在cpp文件中带有和不带有内联关键字,但. ash的输出是相同的。我知道内联只是编译器的提示,很有可能我是优化的受害者,但有可能在一个小的cpp示例中看到内联和非内联方法的差异吗? h: cpp: 主要: 附注: 两种情况下的ASM输出:

  • 我有下面的课 > 我应该在EmailManager上方添加什么注释?@Spy@Mock还是@Autow的? 如何告诉Mockito不要执行getImageLocation(getEmailContent正在调用的方法)并且总是返回而不是“new location”?我看了很多文章,搞不清“什么时候”“存根”“退货”