私はいくつかの内部メソッドから可能な限り多くのパフォーマンスを得ようとしています。
Javaコードは次のとおりです。
List<DirectoryTaxonomyWriter> writers = Lists.newArrayList();
private final int taxos = 4;
[...]
@Override
public int getParent(final int globalOrdinal) throws IOException {
    final int bin = globalOrdinal % this.taxos;
    final int ordinalInBin = globalOrdinal / this.taxos;
    return this.writers.get(bin).getParent(ordinalInBin) * this.taxos + bin; //global parent
}プロファイラーでjava.util.Objects.requireNonNull、にCPU使用率が1%あるのを見ましたが、それを呼び出すことすらしません。バイトコードを検査するとき、私はこれを見ました:
 public getParent(I)I throws java/io/IOException 
   L0
    LINENUMBER 70 L0
    ILOAD 1
    ALOAD 0
    INVOKESTATIC java/util/Objects.requireNonNull (Ljava/lang/Object;)Ljava/lang/Object;
    POP
    BIPUSH 8
    IREM
    ISTORE 2したがって、コンパイラはこの(役に立たない?)チェックを生成します。私はプリミティブに取り組んでいますが、これはnullとにかくできないので、なぜコンパイラーがこの行を生成するのですか?バグですか?または「通常の」行動?
(私はビットマスクで回避するかもしれませんが、私は興味があります)
[更新]
- オペレーターはそれとは何の関係もないようです(以下の回答を参照) 
- Eclipseコンパイラー(バージョン4.10)を使用すると、より妥当な結果が得られます。 
    public getParent(I)I java / io / IOExceptionをスローします 
       L0
        LINENUMBER 77 L0
        ILOAD 1
        ICONST_4
        IREM
        ISTORE 2
       L1
        LINENUMBER 78 L
つまり、それはより論理的です。
javacはこれを生成しません。
                openjdk version "11.0.6" 2020-01-14ubuntu 64ビットでコンパイルされています。
                
INVOKESTATIC