【问题标题】:Is Java String constant pool shared across different JVMs?Java String 常量池是否在不同的 JVM 之间共享?
【发布时间】:2018-06-28 08:50:56
【问题描述】:

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

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

【问题讨论】:

  • 我想它每个 JVM 都有一个单独的。
  • 嗨,@Sweeper .. 如果有的话,你能分享一下参考吗??? ..
  • 所有投反对票的人,如果您对此问题的答案有任何参考,请分享任何参考资料,如果有任何错误,请重新表述..谢谢...
  • 我确定这是针对单个 JVM 完成的

标签: java string jvm


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多