应用层面
- 反射操作记得缓存method和field,最好能用方法句柄或者字节码增强替换掉
public class PerformanceOptimizationDemo {
private static final Method METHOD;
static {
METHOD = "获取method";
}
}
更多细节见 Java反射性能详解
- 原生String的split和replaceAll请谨慎使用,StringTokenizer是个更好的选择,或者这里推荐org.apache.commons.lang3.StringUtils#replace(String, String, String)这个工具类
- 慎用String.intern,当字符串数量非常多时使用hashmap做缓存性能要好得多
- 放弃Random随机数请用ThreadLocalRandom
public static int getRandomNum() {
// 性能略差
return new Random().nextInt();
// 性能更好的平替
return ThreadLocalRandom.current().nextInt();
}
- 正确应用单例模式,逻辑类尽量使用单例,需注意处理线程安全问题,这里推荐静态工厂方式,其唯一的问题是较多的冗余代码,可使用插件解决
public class PerformanceOptimizationDemo {
private PerformanceOptimizationDemo(){
}