Java String常量池是否在不同的JVM之间共享?

时间:2018-01-19 06:51:10

标签: java string jvm

answer可以清楚地看出,每个应用程序都将在特定的Java虚拟机实例中运行。从这个post可以清楚地看出,java字符串是不可变的,JVM预留了一个特殊的内存区域"字符串常量池"存储字符串。

我的问题是如果每个Web应用程序或JVM都有一个共享的String常量池,或者每个Web应用程序和jvm实例都有一个单独的String常量池

1 个答案:

答案 0 :(得分:3)

不能在不同的JVM之间共享字符串池。它被实现为对每个JVM的特定堆中的实际String对象的引用的哈希表。由于对不同堆的引用不兼容,因为每个JVM都有自己的逻辑地址空间,所以无法共享哈希表。

有一种机制可以在JVM Class Data Sharing之间共享公共数据,它使用预处理形式的公共库,通常是JRE。除了类和成员定义以及字节代码之外,这自然包含所有字符串常量,但这只是数据,使用数据创建Java String 对象具有不同的标识并且添加对池的引用仍然受每个JVM的约束。