给定代码:
long i=0;
while(i++<MILLIONS){
String justHex = UUID.randomUUID().toString().replaceAll("-","");
System.out.println(justHex);
}
这会产生很多独特的字符串,最终 gc 必须清理这些字符串。而且,在此处输入代码
对每个字符串执行 replaceAll 将创建更多独特的字符串(两次?)。
这 (replaceAll) 是否是小型应用程序的 GC 的重大开销?
程序员应该担心这些事情吗?
最佳答案
这些字符串是临时字符串,在下一次迭代中不会再被引用,所以我希望它们能很快被垃圾回收。除非基准测试表明循环是性能瓶颈,否则不要太担心它并关注功能的正确性。
对内存使用和性能的更大影响将是您使用 replaceAll
,它需要一个 正则表达式 作为第一个参数。如果不需要正则表达式,最好使用 replace
,它也会替换所有出现的地方,但没有正则表达式开销。
关于Java : Is String. 替换 GC 开销太大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42971051/