Nếu Amigable Clark Kant nghĩ câu hỏi của bạn là dị giáo, anh ấy sẽ thực sự lật ngược câu trả lời này. Gửi tệp này trong "điều có thể" không nhất thiết trong "Justin đề xuất". :-)
Một tùy chọn là sử dụng IKVM.NET để xử lý mã Java của bạn bằng cách sử dụng Mono. IKVM.NET cho phép bạn chạy mã Java trên đầu trang của .NET or the Mono CLR. Một số có thể nói rằng bạn đang bỏ qua JVM theo cách này mặc dù nó sẽ chính xác hơn khi nói rằng IKVM.NET thực sự là một cài đặt của JVM chạy trên CLR.
Ở bất kỳ mức nào, nếu bạn làm điều này, bây giờ bạn có tùy chọn làm Ahead-of-time (AOT) biên dịch mã của bạn bằng Mono. Tức là, bạn có thể biên dịch mã của bạn xuống tận gốc máy, nghĩa là bạn không cần CLR hoặc JVM khi chạy.
Không giống như những gì Jesper đã nói ở trên, việc sử dụng trình biên dịch AOT thực sự có thể dẫn đến hiệu suất tốt hơn. Mặc dù đúng là JVM (và CLR) thực hiện một số tối ưu hóa trong thời gian chạy mà không thể thực hiện tại thời gian biên dịch, ngược lại cũng đúng. Ngoài ra, một trong các tùy chọn là sử dụng LLVM để tạo mã thường mang lại hiệu suất tốt hơn.
Dưới đây là các đường ống dẫn trong một nutshell:
Mã của bạn -> IKVM.NET -> Mono -> LLVM -> Native thực thi
Hoặc, chỉ cần sử dụng một trình biên dịch Java được thiết kế để tạo ra AOT bản thực thi gốc từ đầu (như GCJ hoặc Excelsior Jet).
Một nơi mà tùy chọn Mono/IKVM.NET có thể hữu ích là nếu bạn muốn sử dụng thư viện Java như một phần của ứng dụng iPhone (sử dụng MonoTouch). App Store chỉ cho phép các tệp nhị phân gốc.
EDIT: Bạn cũng có thể sử dụng LLVM VMKit để AOT biên dịch mã Java thành mã máy.Đây là khái niệm tương tự như quá trình tôi mô tả với Mono nhưng giữ những thứ khó chịu CIL ra khỏi hình ảnh.
Heresy! Không, chỉ đùa thôi. Câu hỏi thú vị! +1 –
Làm cách nào để bạn có quyền truy cập vào mã được biên dịch "chỉ trong thời gian" này? Bởi vì nó được thực hiện trên bay lúc chạy, tôi tự hỏi làm thế nào bạn có thể truy cập nó để làm một bãi chứa lắp ráp trên nó ... –
Câu hỏi đầu tiên của bạn là lạ nhưng thứ hai gợi ý rằng bạn nên làm một số đọc về chủ đề này. Việc biên dịch JIT theo định nghĩa dựa trên thông tin chỉ có sẵn trong thời gian chạy, vì vậy nó giống như bạn đang hỏi liệu có cách nào để sử dụng bộ mã hóa MP3 để mã hóa một bài hát mà không phải ghi lại nó trước hay không. – entonio