java appendformat_Java中String.format,StringBuilder,加号拼接字符以及在log中的应用

public class LogTest {

public static void main(String[] args) {

Integer loop = 100000;

Integer timeScale = 1000*1000;

long time = System.nanoTime();

for(int i=0;i

String s = "hello "+ i +"word";

int size = s.length();

}

time = System.nanoTime() - time;

System.out.println("加号拼接: "+time+"ns"+"\t"+time/timeScale+"ms");

time = System.nanoTime();

for(int i=0;i

StringBuilder s = new StringBuilder();

s.append("hello ").append(i).append("word");

int size = s.length();

}

time = System.nanoTime() - time;

System.out.println("使用Builer:"+time+"ns"+"\t"+time/timeScale+"ms");

time = System.nanoTime();

for(int i=0;i

String s = String.format("%s %d %s","hello",i,"word");

int size = s.length();

}

time = System.nanoTime() - time;

System.out.println("使用format:"+time+"ns"+"\t"+time/timeScale+"ms");

}

}

#loop = 10000

加号拼接: 3236400ns3ms

使用Builer:1463300ns1ms

使用format:63009400ns63ms

#loop = 100000

加号拼接: 15908500ns15ms

使用Builer:6040400ns6ms

使用format:216235300ns216ms

#loop = 1000000

加号拼接: 47109700ns47ms

使用Builer:30339500ns30ms

使用format:1083753400ns1083ms

可以看到随着次数越来越大,format效率越来越低。

我们在打log日志的时候,如果对性能要求很高,在打日志的时候加上isInfoEnabled()的判断,如下如所示:

if (logger.isInfoEnabled()) {

logger.info("pay refund, uid:" + payLog.getUid()+", tradeId:"+payLog.getTradeId()+", updateSucc:" + updateSucc);

}

可以显著的提升性能,isInfoEnabled()的判断当前日志级别是否是info或者以上的级别,如果不加这个判断,不管当前日志是什么级别,都会先去将log.info(msg)中的msg拼接好之后采取判断能不能打印。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值