字符串对象占用的内存

时间:2014-05-20 06:24:15

标签: java

我正在浏览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,我们也面临同样的问题?

1 个答案:

答案 0 :(得分:6)

字符串与字符串文字相同。

字符串文字类似于源代码中的"paxdiablo"。从用户获取字符串不会创建字符串文字,它只是创建字符串数据本身, 受垃圾收集。

基本上,该代码片段的内容是,在以下代码中:

String xyzzy = "plugh";

"plugh"字符串文字永远不会消失在比特桶中,尽管其他一些构造的字符串(即非文字)可能会。