Sử dụng trình biên dịch chứng khoán Sun 1.6 và JRE/JIT, có nên sử dụng loại cuộn bao mở rộng được thiết kế bởi Duff's Device để bỏ vòng lặp không? Hay nó kết thúc như mã obfuscation không có lợi ích hiệu suất?Thiết bị của Duff có tăng tốc mã Java không?
Các công cụ lược tả Java tôi đã sử dụng ít thông tin hơn về việc sử dụng CPU từng dòng hơn, ví dụ, valgrind, vì vậy tôi đang tìm cách tăng thêm số đo với trải nghiệm của người khác. Lưu ý rằng, tất nhiên, bạn không thể chính xác mã Thiết bị của Duff, nhưng bạn có thể thực hiện việc hủy đăng ký cơ bản và đó là những gì tôi đang băn khoăn.
short stateType = data.getShort(ptr);
switch (stateType) {
case SEARCH_TYPE_DISPATCH + 16:
if (c > data.getChar(ptr + (3 << 16) - 4)) {
ptr += 3 << 16;
}
case SEARCH_TYPE_DISPATCH + 15:
if (c > data.getChar(ptr + (3 << 15) - 4)) {
ptr += 3 << 15;
}
...
thông qua nhiều giá trị khác.
Tôi không hiểu câu hỏi đã sửa đổi của bạn. Thiết bị của Duff không có nghĩa là chỉ cần thông qua. Vòng lặp xen kẽ là một phần quan trọng. –
Tại sao bạn không ... thử nghiệm nó? Viết phiên bản với vòng lặp như bình thường. Viết một phiên bản với vòng lặp chưa được kiểm. Viết một khuôn khổ thực thi mỗi một triệu lần (hoặc bất kỳ thứ gì). Xem những gì, nếu có, hiệu suất đạt được từ nỗ lực tối ưu hóa của bạn. –
Không có câu trả lời hay nhất ??? O.o –