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à null
dù 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.
javac
không tạo ra điều này.
openjdk version "11.0.6" 2020-01-14
trên Ubuntu 64 bit.
INVOKESTATIC