2015-05-15 123 views
0

在同一個Java虛擬機中運行的兩個不同Java程序共享什麼?JVM中共享的內容

關於單例類,我想到了一些東西:它們只能在每個JVM中實例化一次。這意味着如果兩個不同的Java程序使用同一個類,它們都訪問該Singleton類的同一個實例?

還有什麼共享的東西?

+0

它們在與JVM進程相同的內存空間中運行,因此,所有內容...... – MadProgrammer

+0

有沒有什麼辦法讓兩臺JVM在同一臺機器上運行? –

+2

是的。再次運行'java.exe'。 (對不起,應該「運行java命令」,但你明白了) – MadProgrammer

回答

1

如果您多次運行java命令,您將獲得多個JVM實例。從理論上講,這些完全是分開的,沒有任何共享,但是JVM的一些實現(現在或過去)可能試圖共享數據的某些部分。

我最近沒有看過它,但大約10年前,有一個版本的Sun JVM試圖在JVM實例之間「共享」.class文件映像。 (這可能在可能有數十個JVM同時運行的服務器上很有用,並且它們可能會相當快速地來回運行)。

我不記得任何其他數據共享,但可能有更多或其他數據可能已添加。 (儘管JVM之間沒有其他可以共享的東西。)

但是理論上這應該都是「透明的」,不會影響單個JVM實例的操作。

還有一項針對在最終命令之前部分加載的「熱啓動」JVM的規定。這確實需要系統管理員的一些配置,但在其他方面是透明的。

0

在同一個JVM中運行的兩個或多個程序共享所有內容。對於單身人士來說,如果寫得正確,將會有一個類的單個實例,可以被所有其他對象訪問。

+1

這是不正確的。由兩個獨立的類加載器加載的同一類將存在兩次,並且您將有兩個單例。這些類將通過名稱和簽名相同,但由於具有單獨的'Class'實例而不兼容。 – the8472