在Java中,程序之间共享静态类成员吗?


问题内容

我想不,不是,因为每个进程当然都有自己的内存空间。

但是整个JVM实际如何工作?我启动的每个Java程序在单独的进程中是否都有单独的JVM?系统中运行的Java程序是否共享任何东西?操作系统和JVM实现之间有区别吗?是否可以
使 程序共享变量(即直接通过JVM而不是通常的IPC机制)?是否有更多特殊用途的单进程JVM?

通常,关于JVM胆量的推荐读物是什么?该规范?一些实现的源代码?网站?图书?


问题答案:

在Java中,程序之间共享静态类成员吗?

一个类由其全名和加载该类的类加载器定义。如果同一类位于同一JVM进程内,并且两个程序通过同一类加载器加载了该类,则将共享静态成员。类加载规则极为重要。

我想不,不是,因为每个进程当然都有自己的内存空间。

如果您使用两个单独的JVM启动两个应用程序,那么您是正确的。但是以诸如tomcat之类的应用程序/
servlet容器为例:它们通过同一进程(tomcat主机进程)加载多个应用程序。

但是整个JVM实际如何工作?我启动的每个Java程序在单独的进程中是否都有单独的JVM?系统中运行的Java程序是否共享任何东西?

每次>java -cp...在命令行上键入时,都在创建一个新进程。请记住,当您运行eclipse或调用ant
java任务时,fork=true您也在创建新进程。

操作系统和JVM实现之间有区别吗?是否可以使程序共享变量(即直接通过JVM而不是通常的IPC机制)?是否有更多特殊用途的单进程JVM?

就像海报上所说的那样,有Terracota之类的项目可以为您提供便利。这种共享的一般方法是分布式缓存。