[英]Two object instances of the same class running in separate JVM process
我有一個簡單的 Java SE 應用程序。 它創建同一類的兩個實例,但每個實例都必須在單獨的 JVM 進程中運行。 怎樣才能做到這一點?
我有一個簡單的 Java SE 應用程序,它創建了同一個類的兩個實例,但每個實例都必須在單獨的 JVM 進程中運行,如何實現?
特爾;博士:
你無法做到這一點,你也不應該想要這個,因為它根本沒有任何意義。
胎兒不可能生活在兩個不同母親的子宮里。 它必須屬於任何一個。
稍微多一點:
當您運行 Java 程序時,對於每個單獨的Java 應用程序(例如,手動打包的.class
文件、 .jar
文件、J2EE 容器或任何其他 Java 應用程序),JVM 的離散實例會在您的操作系統之上旋轉核心。
該 JVM 實例加載相應的字節碼、初始化類加載器、分配內存和 CPU 時間,最后這就是您所看到的正在運行的 Java 應用程序。
但是,如果您正在談論進程間通信並將其與您在問題中提出的問題混淆,那么我必須告訴您,當兩個(或更多)JVM 實例相互通信時,IPC 是一種能力,而不是在多個 JVM 之間共享 Java 主類。
正如JLS §5.2 所說:
Java 虛擬機通過使用引導類加載器(第 5.3.1 節)創建以實現相關的方式指定的初始類來啟動。 Java 虛擬機然后鏈接初始類,初始化它,並調用公共類方法 void main(String[])。
因此,在引導 JVM 之后,在鏈接和初始化所有內容后調用 main 方法。 你甚至不能在理論上在兩個或更多 JVM 實例之間共享這個。 想想類加載器、垃圾收集、鏈接階段……應該做什么? 哪個應該引導主要? 哪個應該維護用於對象實例化的Class
類型實例?
此外,每個 JVM 實例都提供單個內核級輸入和輸出流以與操作系統通信。
您可以以某種方式通過在一個 JVM 中運行多個 Java 應用程序來實現反之亦然,但這會產生很多影響和問題,因此非常不鼓勵這樣做。
最后但並非最不重要的一點:您的System.in
和System.out
內核級 I/O 通道是從一個 JVM 到一個 OS 內核的唯一實例。 還要記住這一點,因為在多個 JVM 運行單個 Java 應用程序的情況下,這完全是一團糟和混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.