簡體   English   中英

在不同的 JVM 進程中運行的同一類的兩個對象實例

[英]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.inSystem.out內核級 I/O 通道是從一個 JVM 到一個 OS 內核的唯一實例。 還要記住這一點,因為在多個 JVM 運行單個 Java 應用程序的情況下,這完全是一團糟和混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM