2009-04-14 28 views
15

Các triển khai JVM ở đâu khác nhau (ngoại trừ cấp phép)? Mỗi JVM có thực hiện Loại xóa để xử lý chung không?Sự khác biệt giữa việc triển khai JVM

Đâu là sự khác nhau giữa:

  • JRockit
  • IBM JVM
  • SUN JVM
  • mở JDK
  • Blackdown
  • Kaffe

.... Một trong số họ có Tail-Call-Optimization?

Trả lời

15

Việc triển khai JVM có thể khác với cách chúng thực hiện biên dịch, tối ưu hóa, thu thập rác, hỗ trợ nền tảng, phiên bản Java được hỗ trợ, v.v. Tất cả đều phải đáp ứng tập hợp các tính năng và hành vi để nó thực thi các bytecode Java của bạn một cách chính xác.

Như bạn đã chỉ ra, sự khác biệt chính có xu hướng trong giấy phép. Các khác biệt phi kỹ thuật khác có xu hướng nằm trong các tùy chọn hỗ trợ miễn phí/trả phí, tích hợp với các công nghệ khác (thường là các máy chủ J2EE) và truy cập vào mã nguồn.

Lưu ý: Trong khi máy chủ J2EE chạy trên JVM, một số máy chủ có các công cụ tích hợp để theo dõi, phân tích và tinh chỉnh hiệu suất JVM.

Theo như sự khác biệt về kỹ thuật, những sự khác biệt này ít phát triển hơn trong những năm qua. Ngày xửa ngày xưa, JVM của IBM và JRockit có hiệu năng vượt trội hơn nhiều so với việc thực hiện Sun. Điều này là do sự khác biệt đáng kể trong các loại tối ưu hóa thời gian chạy, sự khác biệt trong thu gom rác thải và sự khác biệt về mã nguồn gốc (và bao nhiêu lớp gốc mà các lớp khác nhau sử dụng). Những khác biệt về hiệu suất này không còn đáng kể nữa.

Một số JVM cũng bao gồm hoặc tích hợp với các công cụ chẩn đoán và giám sát. JRockit bao gồm một bộ công cụ để theo dõi hiệu suất JVM của bạn. Sun cung cấp các công cụ dựa trên JMX khác nhau với các tính năng chồng chéo để làm tương tự. IBM Websphere từng có một thời gian bao gồm một bộ công cụ tương tự cho toàn bộ máy chủ ứng dụng J2EE của họ (không chắc chắn nếu họ vẫn làm, nhưng tôi cho rằng điều đó vẫn đúng) ...

Một số JVM nguồn mở có xu hướng có hiệu suất chậm hơn một chút vì chúng đã được phát triển lại từ đầu. Như vậy, họ đã bắt kịp hơn một chút để làm. Cuối cùng tôi đã kiểm tra khoảng 2 năm trước, Blackdown chậm hơn đáng kể (1.5x-2x?) So với Sun JVM. Nó cũng hơi chậm so với các phiên bản Java được hỗ trợ.

+0

Khi ai đó buộc phải sử dụng JRockit trong hơn 5 năm nay, tôi sẽ nói rằng tổng thể nó không nhanh hơn Hotspot, nhưng nó chắc chắn không mạnh mẽ. Họ hy sinh độ tin cậy cho tốc độ, và kết thúc với không có gì. – erickson

+0

@erickson, Là một người đã tự nguyện sử dụng JRockit trong hơn 5 năm nay, tôi có thể nói rằng trải nghiệm của bạn không phổ biến. JRockit đã tiết kiệm ít nhất một lần với công cụ phát hiện rò rỉ bộ nhớ của nó là tốt. :) Tôi đã không có thêm bất kỳ sự cố nào với nó so với Sun VM (mặc dù đã có 1 hoặc 2). – jsight

1

Biên dịch JIT là một điều mà một số JVM: không có.

+0

Còn JVM thì sao? http://java.sun.com/javase/technologies/hotspot/ Dường như, trình biên dịch JIT điểm phát sóng được nhúng với mọi bản phát hành JVM! –

+0

Tôi không chắc chắn những gì bạn muốn nói ở đó, nhưng có, Hotspot là một phần của Sun JVM. –

+0

Tại sao bạn nói rằng JVM evey không có JIT biên dịch khi nó là một phần của hầu hết các JVM? Tại sao bạn bỏ phiếu cho tôi? –

1

Những thứ như loại xóa được thực hiện bởi trình biên dịch để tương thích ngược với các JVM cũ hơn. Hầu hết các JVM nên hỗ trợ tất cả các tính năng bạn cần, nhưng một số có thể được tối ưu hóa nhiều hơn các tính năng khác. Tôi đoán Sun JVM có lẽ là nhanh nhất.

1

Nếu JVM tuyên bố là Java, nó phải vượt qua TCK, cung cấp rất nhiều cổ phiếu funcitonaltiy.

Sự khác biệt là ở những nơi không cốt lõi, như thu gom rác thải, các jconsole/VisualVM trong Sun JVM, tiền biên dịch, vv


làm rõ: TCK là bộ kiểm tra rằng một máy ảo có để vượt qua để chính thức tuân thủ Java.

+0

Bộ tương thích công nghệ. http://jcp.org/en/resources/tdk –

1

Tối ưu hóa cuộc gọi đuôi chưa được Java hỗ trợ. John Rose đang nỗ lực để đưa điều này vào một bản phát hành trong tương lai và đã mô tả sự tham gia của approach, and some of the issues.

+0

Tôi nhớ về các tùy chọn cho Java6 (các tính năng thử nghiệm), có lẽ Sun JDK hỗ trợ nó như là thử nghiệm? Có gì về "Da vinchi VM" Tôi nghe nói nó nên hỗ trợ TCO! –

+0

Có, dự án da Vinci được hướng tới hỗ trợ cho các ngôn ngữ khác và đó là nơi hỗ trợ đang được tạo mẫu. – erickson

+0

Một số loại tối ưu hóa này (chỉ đệ quy đuôi) được hỗ trợ bởi IBM JVM (một cái gì đó giống như một goto để bắt đầu phương thức) –

1

Sự khác biệt khác giữa các JVM là hành vi trên API không có giấy tờ. (ví dụ: com.sun.xxx) Ví dụ: JVM của Sun và JVM của IBM đều có hành vi hơi khác nhau về xử lý tín hiệu. (JVM của IBM không cho phép ứng dụng bẫy tín hiệu "INT" trong một số trường hợp nhất định.)

1

JVM giống như một Máy ảo hoạt động để tải lớp và bộ mã hóa Bytcode, thực thi mã. trong khi Giao diện Lập trình Ứng dụng là Bộ sưu tập các Gói. và Gói là tập hợp của lớp. Chương trình Java thực thi nơi JVM đã cài đặt và hoạt động.

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