2010-10-08 31 views
11

Một thời gian trước, tôi đã tìm thấy dự án MJVM. Đáng buồn thay, dự án này đã bị bỏ qua bởi tác giả (tôi đã yêu cầu Igor qua email).Java thực hiện một ... JVM?

Tôi tự hỏi liệu có một dự án mã nguồn mở (tiếp theo) về việc triển khai đầy đủ một JVM trong Java như thế này hay không.

Bằng "đầy đủ", ý tôi là, không chỉ mô phỏng thiết bị di động.

Trả lời

30

Jikes RVM có lẽ là triển khai JVM nổi bật nhất được viết bằng Java. Tuy nhiên, việc thực hiện mức thấp nhất của nó chỉ đơn giản là bao gồm các lời gọi phương thức tĩnh đến một giao diện "ma thuật" được xử lý đặc biệt bởi trình biên dịch và được dịch thành mã gốc.

Các Maxine VM (được phát triển ban đầu bởi Sun Labs, bây giờ Oracle Labs) là một thực metacircular VM, trong đó không chỉ tất cả những gì được viết bằng Java, nhưng không có-vỏ đặc biệt trong trình biên dịch xảy ra. Thậm chí nhiều hơn: không chỉ là máy ảo Maxine được viết bằng Java, thậm chí nó còn tự chạy trong chính nó! Điều này nghe có vẻ điên rồ, và thẳng thắn, tôi không biết nó hoạt động như thế nào, nhưng nó dựa trên Klein VM (được phát triển bởi Sun Labs), điều này cũng giống như ngôn ngữ lập trình tự.

Điều này có một số thuộc tính rất thú vị: vì bản thân JVM là một phần của codebase mà JVM diễn giải, cùng một mã lệnh mà mã người dùng thuộc về, điều này có nghĩa là nó có thể thực hiện tối ưu hóa như nội tuyến. IOW: nó có thể inline mã VM vào mã người dùng và ngược lại. Nó cũng có nghĩa là bản thân máy ảo phải tuân theo cùng một cấu hình thời gian chạy và tối ưu hóa động mà   – trên các máy ảo khác (kể cả Jikes)   – chỉ có mã người dùng, có nghĩa là bản thân máy ảo liên tục được biên dịch lại và tái được tối ưu hóa để thích ứng với việc thay đổi tải, các lớp mới được tải, thay đổi các cấu hình, thay đổi các mẫu sử dụng và vân vân. Trên các máy ảo như HotSpot, JRockit, J9 và những người khác, những tối ưu hóa này là không thể, vì một lý do đơn giản là JVM chỉ biết cách tối ưu hóa bytecode JVML, nhưng VM không được viết bằng Java. Nhưng ngay cả trong Jikes, điều này là không thể bởi vì, trong khi VM được viết bằng Java, nó được biên dịch tĩnh thành mã gốc trước khi nó chạy và mã của VM không phải là một phần của mã mà VM thấy ".

Squawk VM cũng là một JVM được phát triển bởi Sun Labs, giờ là Oracle Labs. Không giống như Maxine, gần giống với J9, HotSpot hoặc JRockit trong đối tượng mục tiêu của nó, Squawk tương tự như KVM (ban đầu được phát triển bởi Sun, giờ là Oracle), tức là nhắm mục tiêu vào các thiết bị nhúng bị ràng buộc tài nguyên. Squawk cũng lấy cảm hứng từ Klein. Không giống như Maxine, nó có một lớp trừu tượng nhỏ được viết bằng C. Nhưng hãy nhớ rằng Maxine yêu cầu một hệ điều hành để chạy, trong khi Squawk chạy mà không có một hệ điều hành. Vì vậy, theo một nghĩa nào đó, Squawk thậm chí còn thuần khiết hơn Maxine, bởi vì nhiều phần không phải là một phần của Maxine mà là một phần của hệ điều hành (chúng thường được thực hiện bằng ngôn ngữ C, C++ hoặc các ngôn ngữ cấp thấp khác), thực sự là một phần của Squawk chinh no. Trình điều khiển thiết bị, ví dụ, được viết bằng Java. Chỉ có một lớp trừu tượng phần cứng nhỏ và các thư viện I/O được viết bằng C.

+0

Tôi đã tìm thấy các dự án tương tự sau liên kết trang FAQ của Maxine VM: Joeq, OVM và Moxie. Joeq lần lượt tham chiếu đến JavaInJava và Rivet System. Cảm ơn bạn rất nhiều cho câu trả lời của bạn. – mschonaker

+0

Squawk cung cấp năng lượng cho SunSPOT –

6

Jikes RVM là một JVM được viết bằng Java, được sử dụng để nghiên cứu và được lưu giữ dưới sự phát triển tích cực.

1

JNode là hệ điều hành JVM + được viết bằng Java chạy một máy tính ảo x86 hoặc ảo. SVN của dự án đã khá không hoạt động vào cuối (khoảng 6 tháng qua), nhưng tôi tin rằng có hoạt động trong các gương GIT cho dự án.

+0

JVM là như xa như tôi có thể nhìn thấy nhà phát triển, và nó cần khá nhiều bộ nhớ để làm việc tốt. –

+0

@ ThorbjørnRavnAndersen - đúng vậy. Lõi JVM JNode (bao gồm cả JIT) và tất cả các chức năng của hệ điều hành đều được phát triển. Nó chạy trên 256Mb, mặc dù điều này không thực sự thực tế. Một lý do là nó không sử dụng bộ nhớ ảo. –

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