Mad*_*esh 2 java regex memory string stringbuilder
我有一个像下面的字符串
12SELVASOFTWAREENGINEER................323
Run Code Online (Sandbox Code Playgroud)
这个字符串长度超过 10000
此字符串的前两个字母是员工ID
所以我可以得到我的员工ID如下
String empid = str.substring(0,2);
Run Code Online (Sandbox Code Playgroud)
但是这个字符串为原始字符创建了相同的空间String,因此会发生内存泄漏.
怎么避免这个?
他们的任何替代或有效方式是他们在java中获取字符串的一部分
任何帮助将不胜感激!!!
...但是这个字符串为原始string创建了相同的空间.因此会发生内存泄漏.
我认为您指的String是旧版Java中的行为,其中String.substring(...)创建了一个共享原始String对象的后备数组的对象.正如您所指出的,这可能会导致内存泄漏; 例如,如果原始字符串变得无法访问而子字符串没有.
相关代码可以在这里看到:
在Java 7中修复了此问题.
在Java 7之前,标准的解决方法是执行以下操作:
String empid = new String(str.substring(0, 2));
Run Code Online (Sandbox Code Playgroud)
(new String(...)创建一个不与原始字符串或子字符串共享其后备数组的字符串.)
但是,只有在以下情况下才建议这样做:
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |