一、背景
最近在看代码,发现一个 Date 格式化为 String 的方法。
1 | public String dateFormatString() { |
看到这个方法想到
- 每次都 new 一个 format 会快么(非线程安全,得每次都 new)?
- SimpleDateFormat 格式化快么?
- “yyyy-MM-dd HH:mm:ss.SSS” 改成静态常量会不会快点?
带着以上三个疑问,就想着做个对比测试。
恰巧最近在 perfma 社区看 jvm 相关内容时,刷到了『性能调优必备利器之 JMH』
优点:不用自己写相关统计代码,而且统计方式有多种
二、结论
性能从低到高
- java.text.SimpleDateFormat
- org.apache.commons.lang.time.DateFormatUtils
- org.joda.time.DateTime 字符串静态常量影响
- 是否静态常量几乎没有影响
- 使用常量反而性能有所下降(???为何)
1 | Benchmark Mode Cnt Score Error Units |
说明:
Error 列是空的,看 Score 和 Units 即可
ops/s:一秒钟执行多少次操作
三、代码
3.1 引入相关 jar
1 | <dependency> |
3.2 IDEA 安装 JMH 插件
插件中心搜索:JMH
安装量最高的那个就是
3.3 编写代码
1 | import org.apache.commons.lang.time.DateFormatUtils; |
3.4 执行
安装了 JMH 插件之后,直接对着类名右键,选择运行即可。
JMH 会默认执行当前类下面的所有的基准测试。
四、执行结果
ETA 00:10:50 代表整个测试需要近11分钟
1 | # JMH version: 1.23 |