gpt4 book ai didi

java - add(E e, Object[] elementData, int s) 方法的用途是什么?

转载 作者:行者123 更新时间:2023-11-29 08:21:23 24 4
gpt4 key购买 nike

我正在阅读 source code of ArrayList class我想知道该方法 add(E e, Object[] elementData, int s) .

我已阅读其说明,但我不明白其中的某些部分。

像这些:

keep method bytecode size under 35 (the -XX:MaxInlineSize default value), which helps when add(E) is called in a C1-compiled loop.

  • 什么是“方法字节码”?
  • 为什么应保持在 35 以下?
  • 什么是 C1 编译循环?

最佳答案

“方法字节码大小”是 JVM instructions 的个数方法编译成的。粗略地说,方法越短,这个数字就越低。

C1-compiler是HotSpot VM中的编译器之一。它的工作是将 Java 字节码编译为 JVM 实际执行的 native 代码。

“内联”意味着将被调用的方法的代码直接放入调用 native 代码中,而不是实际执行“跳转”指令。这有助于避免以更大的代码大小为代价的“跳转”指令的开销。

默认情况下,C1 编译器仅内联足够小的方法(通过方法字节码大小来衡量)。

提取该方法可使 add(E) 方法的字节码大小低于内联的默认阈值,从而使 add(E) 更有可能被内联(这反过来也可能允许此方法被内联)。

总而言之,这是一种极其 JVM 特定的优化,在通用代码中使用通常是一个非常糟糕的主意

这种优化被认为可以接受的原因可能有两个:

  1. ArrayList.add 将在几乎所有在 Java 上运行的代码中执行很多
  2. 类本身随 JVM 一起提供,因此您始终可以保证它是通过正在优化的 JVM 执行的。

关于java - add(E e, Object[] elementData, int s) 方法的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57768010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com