Tôi hiện đang sử dụng câu lệnh chuyển đổi để xử lý các loại tin nhắn đến trong đó có 20 trường hợp khác nhau. Một số trường hợp này là các đơn đặt hàng có cường độ lớn hơn các đơn vị khác.Tối ưu hóa câu lệnh chuyển đổi Java với nhiều trường hợp?
là trình biên dịch hotspot thể tối ưu hóa trình tự kiểm tra trường hợp để tìm ra trường hợp đúng để thực hiện hay tôi nên cấu trúc mã của tôi để các trường hợp phổ biến nhất xuất hiện đầu tiên:
switch(messageType)
{
case MOST_COMMON:
// handle it
break;
...
case LEAST_COMMON:
// handle it
break;
}
Mọi trường hợp loại trừ lẫn nhau .
Tôi có nên sử dụng mẫu chiến lược và tra cứu Bản đồ trên loại thông báo tốt hơn không?
Hiệu suất là mối quan tâm chính khi tôi xử lý hàng nghìn thư mỗi giây và đang cố gắng cắt giảm chi phí tạo đối tượng và phương thức gọi.
Rất cám ơn,
Chris
Edit: Cám ơn các con trỏ. messageType là một int với một phạm vi chặt chẽ của các giá trị vì vậy có vẻ như nó sẽ biên dịch sang bytecode "tableswitch", do đó không cần phải sắp xếp lại các trường hợp.
phần có liên quan của JVM spec là đây http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html#14942
IIRC hầu hết các trình biên dịch xử lý các câu lệnh 'switch' trong C và C++ với các bảng tra cứu. Java có thể làm điều tương tự. Nhưng tôi có thể sai. – NullUserException
bản sao có thể có của [Java: If vs. Switch] (http://stackoverflow.com/questions/1061101/java-if-vs-switch) –
JIT * nên * tối ưu hóa đường dẫn trong khi thực thi. Tôi muốn hồ sơ cả hai cơ chế để xem chắc chắn. –