(tôi giả sử bạn đang nói về các ứng dụng khởi chạy thông qua một phương pháp public static void main(String[])
...)
Về lý thuyết, bạn có thể chạy nhiều ứng dụng trong một JVM. Trong thực tế, họ có thể can thiệp lẫn nhau theo nhiều cách khác nhau. Ví dụ:
- JVM có một bộ System.in/out/err, một mã hóa mặc định, một ngôn ngữ mặc định, một bộ thuộc tính hệ thống, v.v. Nếu một ứng dụng thay đổi chúng, nó sẽ ảnh hưởng đến tất cả các ứng dụng.
- Bất kỳ ứng dụng nào gọi System.exit() sẽ giết tất cả các ứng dụng.
- Nếu một chuỗi ứng dụng bị hoang chuyển và tiêu thụ quá nhiều CPU hoặc bộ nhớ, nó sẽ ảnh hưởng đến các ứng dụng khác.
Tóm lại, có rất nhiều vấn đề. Mọi người đã cố gắng hết sức để thực hiện công việc này, nhưng họ chưa bao giờ thực sự thành công. Một ví dụ là thư viện Echidna, mặc dù dự án đó đã được yên tĩnh trong ~ 10 năm. JNode là một ví dụ khác, mặc dù chúng (thực sự là chúng ta) "lừa" bằng cách hack các lớp Java lõi (như java.lang.System) để mỗi ứng dụng nhận được những gì dường như là các phiên bản độc lập của System.in/out/err, các thuộc tính hệ thống và cứ như vậy .
1 - Điều này ("proclets") được cho là một bản hack tạm thời, đang chờ giải pháp thích hợp sử dụng đúng "cách ly". Nhưng sự cô lập hỗ trợ bị đình trệ, chủ yếu là do kiến trúc JNode đã sử dụng một không gian địa chỉ đơn lẻ mà không có cách nào rõ ràng để tách riêng các công cụ "hệ thống" và "người dùng". Vì vậy, trong khi chúng ta có thể tạo các API khớp với các API cô lập, chức năng cô lập khóa (như giết chết một cách cô lập) hầu như không thể thực hiện được. Hoặc ít nhất, đó là/là quan điểm của tôi.
Nguồn
2012-11-24 07:18:39
Tôi e rằng chúng tôi sẽ không thể cung cấp cho bạn nhiều hơn là đã có trong câu hỏi khác. –
@JanDvorak - là tích cực và hy vọng :) –