Java 什么';s添加(E,Object[]elementData,int s)方法?
我正在读这本书,我想知道这个方法 我读过它的描述,但有些部分我不明白 例如: 将方法字节码大小保持在35以下(默认值为-XX:MaxInlineSize), 这有助于在C1编译循环中调用add(E)Java 什么';s添加(E,Object[]elementData,int s)方法?,java,arraylist,Java,Arraylist,我正在读这本书,我想知道这个方法 我读过它的描述,但有些部分我不明白 例如: 将方法字节码大小保持在35以下(默认值为-XX:MaxInlineSize), 这有助于在C1编译循环中调用add(E) 什么是“方法字节码” 为什么要控制在35以下 什么是C1编译循环 方法字节码大小是一个方法编译到的数目。粗略地说,一个方法越短,这个数字就越低 是HotSpot VM中的编译器之一。它的工作是将Java字节码编译为JVM实际执行的本机代码 “内联”意味着将直接调用的方法的代码放入调用本机代码中,而
- 什么是“方法字节码”
- 为什么要控制在35以下
- 什么是C1编译循环
add(E)
方法的字节码大小保持在内联的默认阈值以下,从而使add(E)
被内联的可能性更大(这反过来也允许该方法被内联)
总而言之,这是一个非常特定于JVM的优化,在通用代码中使用它通常是一个非常糟糕的主意
这种优化在这里被认为是可以接受的原因可能有两个方面:
ArrayList.add
将在几乎所有在Java和Java上运行的代码中大量执行是JVM中的一个编译器,可将字节码转换为本机代码。您能在阅读此文章的地方添加链接吗?您在哪里看到此方法?Java代码被编译为字节码。可以将其视为JVM的机器代码指令。Hotspot JIT编译器在将字节码转换为实际机器代码时会进行一些优化。其中之一是内联小方法。显然,方法体中35字节的指令是一个重要的阈值。Hotspot有(或传统上有)两种操作模式,C1不需要很多时间,C2需要更多时间,但考虑了更多优化。感谢您的解释,Joachim!