在开始之前我们先来看一段代码,大家认为哪一个方法会快一些?
> 很多场景下需要格式化字符串,例如日志输出。

----
运行以下程序:

----
使用 `jvisualvm` 进行CPU抽样:
```shell
$ jvisualvm
```

由监控结果可知 `使用+号` 进行 `字符串格式化` 的耗时明显低于`String.format` 和 `消息模板`。
----
下面是使用JMH进行基准测试后的结果(JMH的使用参见附录):

从上面的结果可以看出append方法耗时最短。
> 原因:Formatter每次都会对输入参数预编译成中间格式,再进行输出,效率非常低。
----
SLF4J采用了如下格式:
```java
LOG.info("订单id:{} 用户:{} 状态:{}", id, name, status);
```
考虑到性能,可以改成以下格式:
```java
LOG.info("订单id:" + id + "用户:" + name + "状态:" + status);
```