2009-07-17 27 views
6

Theo thời gian, JVM của Sun và JIT đã trở nên khá thông minh. Những điều từng là kiến ​​thức phổ biến như là một tối ưu hóa vi mô cần thiết không còn cần thiết, bởi vì nó được đưa về chăm sóc cho bạn.Smart JVM và JIT Micro-Optimizations

Ví dụ, nó được sử dụng phải là trường hợp mà bạn nên đánh dấu tất cả các lớp học có thể là cuối cùng, vì vậy JVM inlines càng nhiều mã càng tốt. Tuy nhiên bây giờ, JIT biết lớp của bạn là cuối cùng dựa trên những gì các lớp được tải trong thời gian chạy, và nếu bạn tải một lớp để làm cho một bản gốc không thể cuối cùng, nó un-inlines các phương pháp và bỏ đánh dấu nó như sau cùng.

gì thông minh vi tối ưu hóa khác không JVM hoặc JIT gì cho bạn?

EDIT: Tôi đã tạo một wiki cộng đồng này; Tôi muốn thu thập chúng theo thời gian.

Trả lời

6

Nó vượt quá ấn tượng. Tất cả những điều này là những thứ mà bạn can't làm trong C++ (chắc chắn ở cùng mức độ Java). Hãy nhớ rằng các phiên bản Java đầu tiên đã bắt đầu danh tiếng "chậm" bằng cách không có những thứ này và chúng tôi tiếp tục cải thiện đáng kể theo thời gian. Đây vẫn là một khu vực nghiên cứu lớn.

+0

cũng java có thể là thông minh nhưng nó vẫn sử dụng rất nhiều nguồn tài – Roch

+2

@mnml nó ít hơn những gì các quan điểm phổ biến là. để tạo ra một đối tượng, tôi nghĩ rằng họ có nó xuống một cái gì đó giống như 2 hoặc 3 hướng dẫn. có một cái gì đó như C + + nói chung là nhanh hơn, nhưng 'tài nguyên' không chỉ là CPU và bộ nhớ; đó là giờ của con người. phần cứng rẻ, mọi người đều đắt tiền. về lâu dài, java thường sẽ giành chiến thắng trong hoạt động vì JIT của nó là tuyệt vời và sẽ tối ưu hóa ứng dụng nhiều hơn hầu hết các ứng dụng C++ có thể mơ ước. –

+1

@ Mong muốn tôi có thể cung cấp cho bạn đại diện cho chỉ ra mọi người là tài nguyên. Như khủng khiếp vì nó là để tin rằng. Thời gian của bạn như là một nhân viên thường sẽ chi phí công ty nhiều tiền hơn nói rằng mùa xuân cho một terabyte thêm trong ổ cứng hoặc CPU tốt hơn trong các dịch vụ web cũ của anh. –

3

Java là thông minh hơn tại nội tuyến vì nó có thể

  • mã nội tuyến chỉ có sẵn trong thời gian chạy hoặc thậm chí tạo động.
  • phương pháp ảo nội tuyến (tối đa hai phương pháp cùng một lúc)
  • thực hiện phân tích thoát trên phương pháp nội tuyến và phương pháp được đưa vào. (Khó khăn hơn nhiều để làm trong C++)
Các vấn đề liên quan