2010-08-02 27 views
16

Theo thông tin mà tôi có thể thu thập trên môi trường thực thi .NET và Java, hiện trạng của vấn đề là sau:Thời gian chạy .NET so với Java Hotspot: .NET có phải là một thế hệ sau không?

Đánh giá qua một bên và không có ý định leo thang chiến tranh thánh, điều này có nghĩa là Java Hotspot VM là một thế hệ trước .Net. Các công nghệ này có được sử dụng tại Java VM cuối cùng sẽ tìm đường vào thời gian chạy .NET không?

+11

Bài viết liên kết cho thấy rằng biên dịch lại động có thể là một điều tốt, nhưng khó biết chắc chắn, vì VM có thể chọn tối ưu hóa lại mà không cần cảnh báo. Nếu không có một hồ sơ mã hợp lý, nó có vẻ giống như một bài báo của đức tin, vì không có bằng chứng cho thấy "cải thiện hiệu suất tuyệt vời" thực sự xảy ra. –

+0

Nó có vẻ là một kỹ thuật hiệu quả để cải thiện chi phí điều phối đa hình. Xem thêm: http://en.wikipedia.org/wiki/Adaptive_optimization và http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.49.3894&rep=rep1&type=pdf – Dan

+4

Nếu công nghệ đó là một sự cải tiến như vậy đối với mô hình JIT/NJEN Tôi chắc chắn rằng Microsoft sẽ thực hiện nó. Luận án đó là từ năm 1994 và bài báo của IBM là từ năm 2004. –

Trả lời

8

Tôi chưa bao giờ đánh giá cả hai để so sánh và tôi quen thuộc hơn với Sun JVM, tôi chỉ có thể nói chung về các thuật ngữ JIT.

Luôn có sự cân bằng với tối ưu hóa và không phải tất cả các tối ưu hóa đều hoạt động mọi lúc. Tuy nhiên, đây là một số kỹ thuật JIT hiện đại.Tôi nghĩ rằng đây có thể là khởi đầu của một cuộc nói chuyện tốt nếu chúng ta dính vào những thứ kỹ thuật:

Ngoài ra còn có các tính năng mà rất hữu ích như xa như tốt việc triển khai VM đi:

  • có khả năng chọn giữa GC
  • triển khai tùy biến của mỗi GC
  • thông số phân bổ đống (chẳng hạn như tốc độ tăng trưởng)
  • trang khóa

Dựa trên các tính năng này và nhiều hơn nữa, chúng ta có thể so sánh các máy ảo và không chỉ là "Java" so với ".NET", nhưng, JVM của Sun so với JVM của IBM so với .NET so với Mono.

Ví dụ, JVM của Sun không thực hiện tối ưu hóa cuộc gọi đuôi, IIRC, nhưng IBM thực hiện.

8

Dường như ai đó đang làm việc trên một cái gì đó tương tự cho Rotor. Tôi không có quyền truy cập vào IEEE nên tôi không thể đọc tóm tắt.

Dynamic recompilation and profile-guided optimisations for a .NET JIT compiler

Trích từ Tóm tắt ...

Một đánh giá về khuôn khổ sử dụng một tập các chương trình thử nghiệm cho thấy rằng hiệu suất có thể cải thiện bằng cách tối đa 42,3% và bằng cách Trung bình 9%. kết quả của chúng tôi cũng cho thấy rằng các chi phí thu thập hồ sơ chính xác thông tin thông qua thiết bị đo đạc để một mức độ lớn hơn những lợi ích của việc optimisations profile-hướng dẫn tại thực hiện của chúng tôi, cho thấy nhu cầu để thực hiện kỹ thuật mà có thể giảm các chi phí như vậy .

+1

Điểm thú vị. Tôi tự hỏi nếu đây là lý do tại sao chuyển đổi máy chủ dường như làm cho rất nhiều sự khác biệt trong Java, có lẽ họ giả định rằng nếu nó không có chuyển đổi máy chủ tích cực biên dịch lại sẽ không được một thương mại-off, nhưng với -Server bạn cho rằng bạn có thể chạy trong nhiều tháng để bạn có thể tiến lên và làm cho nó chạy tốt nhất có thể ... –

14

Chúng tuân theo hai chiến lược khác nhau. Tôi không nghĩ một người giỏi hơn người kia.

  • .NET không giải thích bytecode, vì vậy nó phải JIT mọi thứ được thực thi và do đó không thể tối ưu hóa nhiều do hạn chế về thời gian. Nếu bạn cần tối ưu hóa nặng trong một số phần của mã, bạn luôn có thể NGEN theo cách thủ công hoặc thực hiện nhanh nhưng thực hiện unsafe. Ngoài ra, calling native code is easy. Cách tiếp cận ở đây dường như nhận được thời gian chạy đủ tốt và tối ưu hóa thủ công các nút cổ chai.

  • Các JVM hiện đại thường sẽ giải thích hầu hết mã và sau đó thực hiện biên dịch tối ưu hóa các nút cổ chai. Điều này thường có kết quả tốt hơn so với JIT'ing thẳng, nhưng nếu bạn cần nhiều hơn, bạn không có unsafe trong Java và calling native code is not nice. Vì vậy, cách tiếp cận ở đây là làm tối ưu hóa tự động nhiều nhất có thể, bởi vì các tùy chọn khác không phải là tốt.

Thực tế, các ứng dụng Java có xu hướng thực hiện tốt hơn trong thời gian và tệ hơn trong không gian khi so sánh với .NET.

+0

Câu trả lời hay nhất. Mặc dù tôi không phải là chuyên gia Java, tôi nghĩ tương đương của PInvoke là JNA đơn giản hơn nhiều (http://en.wikipedia.org/wiki/Java_Native_Access) và không phải là JNI. – ygoe

3

Bạn có thể quan tâm đến SPUR là trình biên dịch Truy tìm JIT. Trọng tâm là trên javascript nhưng nó hoạt động trên CIL không phải ngôn ngữ chính nó. Đây là một dự án nghiên cứu dựa trên Bartok chứ không phải VM VM tiêu chuẩn. Bài báo có một số điểm chuẩn hiệu suất hiển thị 'nó luôn hoạt động nhanh hơn SPUR-CLR' là chuẩn 3.5 CLR. Chưa có bất kỳ thông báo nào về tương lai của nó liên quan đến máy ảo hiện tại. Dấu vết có thể vượt qua ranh giới phương pháp mà không phải là một cái gì đó HotSpot nào AFAIK, JVM truy tìm JIT được đề cập here.

Tôi sẽ do dự khi nói .NET VM là một thế hệ đằng sau đặc biệt là khi xem xét tất cả các hệ thống con, đặc biệt là generics. Cách số GCDLR so với tính năng kích hoạt động cơ so sánh Tôi không chắc chắn nhưng có rất nhiều chi tiết về chúng tại các địa điểm như channel9.

Các vấn đề liên quan