2012-07-19 14 views
5

Từ Exceptions chương trong Java hiệu quả:Trong những cách nào có thể đặt một số mã trong thử các khối catch ngăn chặn JVM làm tối ưu hóa?

đặt mã bên trong một khối try-catch ức chế tối ưu hóa nhất định mà hiện đại triển khai JVM khác có thể thực hiện

Tại saocách làm một khối try-catch ngăn chặn sự tối ưu hóa của các JVM?

+0

[Câu hỏi này] (http://stackoverflow.com/questions/299068/how-slow-are-java-exceptions) có thể hữu ích. – Leri

Trả lời

2

Một trong những lý do "tại sao" là ngoại lệ và xử lý ngoại lệ là giả định là ngoại lệ; tức là mã hiếm khi được thực hiện. Nó sau thời gian mà trình biên dịch JIT dành cho việc tối ưu hóa các trình xử lý ngoại lệ sẽ có ít lợi ích cho hiệu năng tổng thể.

Trình tối ưu hóa trình biên dịch JIT phải cân bằng lợi ích hiệu suất của các tối ưu hóa có hiệu quả chống lại các chi phí tối ưu hóa. Loại thứ hai bao gồm:

  • chi phí kiểm tra điều kiện tiên quyết phức tạp để xem nếu một tối ưu hóa là có thể,
  • chi phí kinh tối ưu hóa thực tế, và
  • chi phí (Oracle) thực hiện và duy trì một phần phức tạp của phần mềm mà thực hiện một tối ưu hóa đó là (trong điều kiện bình thường/giả định) sẽ không có hiệu quả.

Cũng có thể có lý do kỹ thuật ngăn chặn tối ưu hóa xử lý ngoại lệ. Ví dụ, nó có thể không dễ dàng (hoặc thậm chí có thể) cho trình tối ưu hóa để tìm ra nơi luồng kiểm soát "đến từ đâu". Do đó, tối ưu hóa dựa trên việc biết rằng (ví dụ: các công cụ lưu trong bộ nhớ đệm trong sổ đăng ký, không thể thực hiện các biểu thức con phổ biến, ...).

5

JVM không thể kết hợp hoặc sắp xếp lại các thao tác bên trong khối try/catch với các khối bên ngoài khối try/catch. Mỗi lớp phức tạp làm cho việc tối ưu hóa trở nên khó khăn hơn. Nếu nó là một trường hợp tương đối hiếm, nó có thể không được xử lý bởi JVM, nếu nghi ngờ, hãy chọn tính đúng đắn hơn là mã tối ưu.

+0

bạn có thể xây dựng "Nếu nó là một trường hợp tương đối hiếm, nó có thể không được xử lý bởi JVM mà, nếu nghi ngờ, hãy chọn đúng đắn hơn là mã tối ưu." . Câu trả lời của bạn dường như trả lời như thế nào một phần, tuy nhiên tôi không chắc chắn về lý do tại sao một phần, mặc dù. – Geek

+2

Lý do tại sao nó là một tình huống phức tạp và hiếm khi hữu ích. –

-1

Kiểm tra liên kết sau:

How slow are Java exceptions?

Tôi đoán trường hợp ngoại lệ là đối tượng Java và các đối tượng này cần phải được tạo ra. Tạo một đối tượng là một hoạt động tốn kém. Vì vậy, chỉ sử dụng ngoại lệ để xử lý lỗi và không kiểm soát luồng.