【发布时间】:2025-11-27 10:00:01
【问题描述】:
stringbuilder释放内存的最快方法是什么
StringBUilder sb = new StringBuilder();
sb.apppend(maximum value possible);
下面是我尝试尽快释放内存并使对象符合垃圾回收条件的代码 sn-ps
选项 1:
sb = null;
据我了解,stringbuilder中的所有数据都将被删除,对象一被踢进去就可以进行垃圾回收,但是stringbuilder占用的文本内存将被释放。里面的字符串值也会从堆中删除还是存储在字符串池中?
选项 2:
sb.setLength(0);
这将重置字符串生成器的长度,但不会被垃圾回收
选项 3:
sb.delete(0,sb.length());
这将通过删除其中的所有数据来重置字符串生成器,但不会被垃圾回收
选项 4:
sb.delete(0,sb.length());
sb = null;
这将重置字符串生成器并使其符合垃圾收集条件?!
【问题讨论】:
-
您不能保证在任何特定时间点都会释放内存(如果有的话)。这完全取决于垃圾收集器,并且取决于特定的 JVM 实现和配置。
-
如果释放内存是您首先关心的问题,您可以编写本机代码,将其与 JNI 链接并自己管理内存,但这样做会破坏使用 Java 的大部分目的。就像 GhostCat 所问的那样,为什么?
-
重新字符串池:
StringBuilders never 的内容去那里。 永远不会。只有实际的Strings 会去那里,然后只有如果你在运行时通过调用.intern()专门把它们放在那里,或者编译器在编译时把它们放在那里。跨度>
标签: java performance garbage-collection