美文网首页
实测apache-common-lang3 StringUtil

实测apache-common-lang3 StringUtil

作者: 鹅鹅鹅_ | 来源:发表于2018-12-30 18:04 被阅读0次

    一般来说,String.replace 方法工作得很好,而且非常高效,特别是如果你使用的是Java 9。但是,如果应用程序需要大量的替换操作,并且你还没有更新到最新的Java版本,那么检查更快和更有效的替代方案仍然是有意义的。
    当然,上面一段话来自网络:),而且网络上关于StringUtils的介绍都是很多年前的,貌似最近几年没有相关的介绍了,但是apache依然在更新StringUtils。
    那么,StringUtils类值得使用吗?值不值得,测试一下就知道!Just test it。

    本文结论是在Java8中值得使用,本文的基准测试全部基于Java8,若你使用的是Java其他版本,请使用JMH仔细测试,然后再决定要不要使用StringUtils进行优化。
    本文测试代码可以在JMH-Example下载

    • 测试代码
    package jmh.benchmarks;
    import org.apache.commons.lang3.StringUtils;
    import org.openjdk.jmh.annotations.*;
    import org.openjdk.jmh.runner.Runner;
    import org.openjdk.jmh.runner.RunnerException;
    import org.openjdk.jmh.runner.options.Options;
    import org.openjdk.jmh.runner.options.OptionsBuilder;
    import org.openjdk.jmh.runner.options.TimeValue;
    
    import java.util.concurrent.TimeUnit;
    
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    @State(Scope.Thread) //Thread: 该状态为每个线程独享。
    public class StringUtilsBenchmark {
        @Benchmark
        public void utilsReplace() {
            StringUtils.replace("jmh string utils replace", "utils", "");
        }
    
        @Benchmark
        public void replace() {
            "jmh string utils replace".replace("utils", "");
        }
    
        @Benchmark
        public void utilsSplit() {
            StringUtils.split("jmh string utils replace", " ");
        }
    
        @Benchmark
        public void split() {
            "jmh string utils replace".split("");
        }
    
        public static void main(String[] args) throws RunnerException {
            Options opt = new OptionsBuilder()
                    .include(StringUtilsBenchmark.class.getSimpleName()) //benchmark 所在的类的名字,注意这里是使用正则表达式对所有类进行匹配的
                    .forks(1) //进行 fork 的次数。如果 fork 数是2的话,则 JMH 会 fork 出两个进程来进行测试
                    .warmupIterations(2) //预热的迭代次数
                    .warmupTime(TimeValue.valueOf("2"))
                    .measurementIterations(5) //实际测量的迭代次数
                    .measurementTime(TimeValue.valueOf("3"))
                    .build();
    
            new Runner(opt).run();
        }
    }
    
    
    • 测试结果
    Benchmark                          Mode  Cnt  Score   Error  Units
    StringUtilsBenchmark.replace       avgt    5  0.459 ± 0.062  us/op
    StringUtilsBenchmark.split         avgt    5  1.251 ± 0.053  us/op
    StringUtilsBenchmark.utilsReplace  avgt    5  0.089 ± 0.004  us/op
    StringUtilsBenchmark.utilsSplit    avgt    5  0.175 ± 0.006  us/op
    
    • 结论
      测试结果证明在Java8中使用StringUtils进行字符串replace、split,其效率远高于java8再带的api,尽请放心的优化吧。

    相关文章

      网友评论

          本文标题:实测apache-common-lang3 StringUtil

          本文链接:https://www.haomeiwen.com/subject/asnvlqtx.html