Tôi đang cố gắng để có được hiệu suất cao nhất có thể từ một số phương pháp nội bộ.
Mã Java là:
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
}
Trong hồ sơ của tôi, tôi thấy có 1% CPU chi tiêu java.util.Objects.requireNonNull, nhưng tôi thậm chí không gọi đó. Khi kiểm tra mã byte, tôi thấy điều này:
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
Vì vậy, trình biên dịch tạo ra kiểm tra này (vô dụng?). Tôi làm việc trên các nguyên thủy, không thể là nulldù sao, vậy tại sao trình biên dịch tạo ra dòng này? Có phải là một lỗi? Hay hành vi 'bình thường'?
(Tôi có thể làm việc xung quanh với một bitmask, nhưng tôi chỉ tò mò)
[CẬP NHẬT]
Toán tử dường như không có gì để làm với nó (xem câu trả lời bên dưới)
Sử dụng trình biên dịch nhật thực (phiên bản 4.10) tôi nhận được kết quả hợp lý hơn này:
công khai getParent (I) Tôi ném java / io / IOException
L0
NGÀY 77 L0
ILOAD 1
ICONST_4
IREM
ISTORE 2
L1
NGÀY 78 L
Vì vậy, đó là hợp lý hơn.
javackhông tạo ra điều này.
openjdk version "11.0.6" 2020-01-14trên Ubuntu 64 bit.
INVOKESTATIC