减少字符串的数量
在 Java 中,创建许多不需要的 String 实例太简单了。这个和其他原因可能会导致你的程序有很多 GC 忙于清理的字符串。
你可能在某些方面创建 String 实例:
myString += "foo";
或者更糟糕的是,在循环或递归中:
for (int i = 0; i < N; i++) {
myString += "foo" + i;
}
问题是每个+
都会创建一个新的 String(通常,因为新的编译器会优化某些情况)。可以使用 StringBuilder
或 StringBuffer
进行可能的优化:
StringBuffer sb = new StringBuffer(myString);
for (int i = 0; i < N; i++) {
sb.append("foo").append(i);
}
myString = sb.toString();
如果经常构建长字符串(例如 SQL),请使用 String 构建 API。
其他需要考虑的事项:
- 减少
replace
,substring
等的使用 - 避免使用
String.toArray()
,特别是在经常访问的代码中。 - 不应生成要过滤的日志打印(例如,由于日志级别)(应提前检查日志级别)。
- 如有必要,请使用此类库。
- 如果变量以非共享方式(跨线程)使用,StringBuilder 会更好。