java - StringPool中的字符串对象生命周期

标签 java string lifecycle pool

我们都知道JVM商店String变量在单独的 StringPool 中。 每次当我们创建String(eg. String s1 = "anystring")当我们创建新的 String 时,它存储为常量变量作为相同的值,它使用相同的引用,除了创建新的 String常数。

我只是想知道 StringPool 中该变量的生命周期是多少。是application levelJAVA environment level .

问题:如果JVM level,那么不同的应用程序是否使用相同的引用?

我不确定我在 String 中的进展理论。但我正在寻找答案。

最佳答案

字符串池中对象的生命周期与任何其他对象一样受相同规则的控制。只要对象可访问,它就会继续存在。在它变得无法访问一段时间后,它将被回收。

与类中的文字相对应的 String 对象的唯一“不同”之处在于该对象可以通过类的代码访问。通常,类代码的生命周期就是 JVM 的生命周期。但是,如果该类是动态加载的,然后您继续使加载它的类加载器无法访问,等等,那么该类可能会变得无法访问,因此文字对象可能会变得无法访问。

I just want to know that what is the life of that variable in StringPool. is it application level or JAVA environment level.

不清楚你所说的“应用程序级别”和“Java环境级别”是什么意思,但正常情况下,正在运行的应用程序的生命周期与JVM的生命周期相同。但无论哪种方式,都是由可达性分析决定的;即 GC 用于确定对象是否仍可用于计算的“跟踪”过程。

<小时/>

实际上,您问题中的这一陈述可以说是不正确的。

All we know that JVM stores String variables in a separate StringPool.

事实上,在 Java 7 中,字符串池实际上存储在常规堆中,而不是永久堆中。 (此外,您实际上指的是 String 对象而不是 String 变量。对象和变量根本不是同一件事......)

关于java - StringPool中的字符串对象生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16439340/

相关文章:

javascript - componentWillMount 最初不根据 Prop 更新状态

android - 接收器生命周期 - 在 onResume() 中重新注册时崩溃

java - 任务终止 : to close a java program

JavaFX - 圆形和矩形之间的交互

java - Java中的Add-Recursion,为什么最大值这么低?

java - 根据条件将字符串转换为字符串

java - 如何防止 GUI 在 Java 中重叠

c - 尝试加载链表时 Malloc 崩溃

c - 使用递归查找最长的单词 C

angular - 第一次加载页面时调用 ngOnDestroy