我正在浏览Java ranch site for Strings并看到垃圾收集部分的声明:
与大多数对象不同,String文字始终具有对它们的引用 来自String Literal Pool。这意味着他们总是有一个 因此,他们没有资格获得垃圾 集合。
如果我有一个带有Java bean类的Web应用程序 - 例如employee
public class Employee {
int employeId;
String firstName;
String lastName;
String fullName = firstName + lastName; // or firstName.concat(lastName);
.... Setters & Getters....
}
如果应用程序创建了这么多员工,那么每次都会根据请求参数填充此bean。此外,如果应用程序提供搜索功能,用户可以根据名字和姓氏查找员工,那么我们需要填充此bean并将其传递到请求范围,以便用户可以看到结果。
在这种情况下,应用程序为firstName,lastName和fullName创建了很多字符串。根据Java ranch网站的解释,一段时间后我们会得到OutOfMemory
错误吗?还假设如果我只有firstName和lastNname又是字符串,即使我们没有fullName,我们也面临同样的问题?
答案 0 :(得分:6)
字符串不与字符串文字相同。
字符串文字类似于源代码中的"paxdiablo"
。从用户获取字符串不会创建字符串文字,它只是创建字符串数据本身, 受垃圾收集。
基本上,该代码片段的内容是,在以下代码中:
String xyzzy = "plugh";
"plugh"
字符串文字永远不会消失在比特桶中,尽管其他一些构造的字符串(即非文字)可能会。