一些Java小技巧

交换判断条件提高性能

在下面的例子中

1
2
3
4
if (Utils.string2Number((String) value) != null || style.getFormat() instanceof NumberFormat) {
}
if (style.getFormat() instanceof NumberFormat || Utils.string2Number((String) value) != null) {
}

上下两个代码,第一个的判断先转数值类型 第二个则先判断format类型

第一段代码不管什么类型都会做一次类型的转换,这样的效率是很低的,而判断类型则要快很多

所以写if条件的时候要遵循的原则是判断简单的条件写在前面
不过说一点,最好的方法还是封装好多态,而不是用instanceof判断类型来执行方法

关于简单对象

在jdk8以下构造大量简单对象效率也是极差,jdk8速度很快差不多差上千倍,所以能使用基本类型尽量使用基本类型,而不是用一个简单的对象对基本类型进行封装

大量轻量级计算时不要直接提交到线程池

比如有80w个计算,每个耗时都很短,排队的时候会浪费大量的等待时间,不如直接分成几组,比如分成8组,每个线程执行10w个计算,以后可以通过其他方式来均衡每个线程的负载

##有用的网站

分析GC日志

分析ThreadDump