多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在开始之前我们先来看一段代码,大家认为哪一个方法会快一些? > 很多场景下需要格式化字符串,例如日志输出。 ![](https://img.kancloud.cn/f3/18/f318ad6b3a28246dd2c532bb76295a83_904x572.png) ---- 运行以下程序: ![](https://img.kancloud.cn/53/04/53044b193273134f81676f8dd301924b_684x184.png) ---- 使用 `jvisualvm` 进行CPU抽样: ```shell $ jvisualvm ``` ![](https://img.kancloud.cn/47/78/47788ce4f025e746865ee8a2f623c728_1280x475.png) 由监控结果可知 `使用+号` 进行 `字符串格式化` 的耗时明显低于`String.format` 和 `消息模板`。 ---- 下面是使用JMH进行基准测试后的结果(JMH的使用参见附录): ![](https://img.kancloud.cn/f5/51/f551547b378588e19e19256e59a5d165_1144x152.png) 从上面的结果可以看出append方法耗时最短。 > 原因:Formatter每次都会对输入参数预编译成中间格式,再进行输出,效率非常低。 ---- SLF4J采用了如下格式: ```java LOG.info("订单id:{} 用户:{} 状态:{}", id, name, status); ``` 考虑到性能,可以改成以下格式: ```java LOG.info("订单id:" + id + "用户:" + name + "状态:" + status); ```