2015-05-15 94 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