我们都知道JVM
商店String
变量在单独的 StringPool
中。
每次当我们创建String
时(eg. String s1 = "anystring")
当我们创建新的 String
时,它存储为常量变量作为相同的值,它使用相同的引用,除了创建新的 String
常数。
我只是想知道 StringPool
中该变量的生命周期是多少。是application level
或JAVA 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/