emi*_*lly 4 java memory string garbage-collection
我知道当我们创建字符串文字时,它会进入permgenspace.我的问题是它是否会存在于jvm的生命周期中,即使该字符串文字是方法本地的.例如,我有以下代码片段: -
private static void testString1(){
String str1="tetingLiteral";
}
private static void testString2(){
String str2="tetingLiteral";
}
Run Code Online (Sandbox Code Playgroud)
现在从主要方法我打电话
testString1();
testString12();
Run Code Online (Sandbox Code Playgroud)
将str1和str2引用到相同的内存位置.
我的理解是他们将引用相同的内存位置(即使在方法内创建字符串文字,它将在jvm的生命周期内保留).但仍然想确认它,因为我无法以编程方式检查它becoz无法打印字符串内存位置
此外,字符串文字始终引用类String的相同实例.这是因为字符串文字 - 或者更常见的是作为常量表达式(第15.28节)的值的字符串 - 被"实例化"以便使用String.intern方法共享唯一实例.
(请参阅下面的示例,其中显示字符串实习也适用于不同包中的类.)