Java 字符串对象占用的内存

Java 字符串对象占用的内存,java,Java,我正在浏览《垃圾收集》一节下面的声明,其中说: 与大多数对象不同,字符串文字总是有对它们的引用 从字符串文本池。这意味着他们总是有一个 引用它们,因此不符合垃圾处理的条件 收藏 如果我有一个带有JavaBean类的web应用程序,例如-employee as public class Employee { int employeId; String firstName; String lastName; String fullName = firstName + last

我正在浏览《垃圾收集》一节下面的声明,其中说:

与大多数对象不同,字符串文字总是有对它们的引用 从字符串文本池。这意味着他们总是有一个 引用它们,因此不符合垃圾处理的条件 收藏

如果我有一个带有JavaBean类的web应用程序,例如-employee as

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和lastname,它们又是字符串,即使没有fullName,我们也会面临同样的问题?

字符串与字符串文本不同

字符串文字在源代码中类似于
“paxdiablo”
。从用户处获取字符串并不会创建字符串文字,它只会创建字符串数据本身,而字符串数据本身会被垃圾收集

基本上,该代码段说明的是,在以下代码中:

String xyzzy = "plugh";
“plugh”
字符串文字永远不会消失在位存储桶中,尽管其他一些构造的字符串(即非文字)可能会消失。

字符串与字符串文字不同

字符串文字在源代码中类似于
“paxdiablo”
。从用户处获取字符串并不会创建字符串文字,它只会创建字符串数据本身,而字符串数据本身会被垃圾收集

基本上,该代码段说明的是,在以下代码中:

String xyzzy = "plugh";

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

感谢paxdiablo,当您说“创建字符串数据本身”时,这是否意味着创建了新的字符串对象而不是字符串文字?这意味着,如果您编写
字符串a=“xxx”;字符串b=“yyy”;字符串c=a+b;字符串d=新字符串(a)常量池中只有两个
String
s:“xxx”和“yyy”谢谢paxdiablo,这是否意味着当您说“创建字符串数据本身”时,会创建新的字符串对象而不是字符串文本?这意味着,如果您编写
String a=“xxx”;字符串b=“yyy”;字符串c=a+b;字符串d=新字符串(a)常量池中只有两个
String
s,当引用它们的类被清除时,“xxx”和“yyy”字符串文本可以被清除。在许多应用程序中,这种情况从未发生过,但这并不意味着它们永远不合格。字符串文本可以在引用它们的类被清除时被清除。在许多应用程序中,这种情况从未发生过,但这并不意味着它们永远不合格。