java - Apache Commons Lang StringUtils 较慢

标签 java apache

Background

尝试进行一个简单的实验,看看传统的 if 语句检查 null 是否比 Apache Commons Lang StringUtils isEmpty/isBlank 更快。

为了运行此测试,我使用 Java 8u102、Apache Commons Lang 版本 3.4 并在 Windows 10 64 位上运行。

The Test Code

下面是使用标准主类的测试代码:

        System.out.println("Testing of StringUtils.isNotNull vs native java method");
        System.out.println("======================================================");
        System.out.println("Testing conventional method...");
        final List<String> array = new ArrayList<String>();
        array.add("1");
        array.add(null);
        array.add("3");
        array.add(null);
        array.add("5");
        long start = System.currentTimeMillis();
        for (String s : array) {
            System.out.println(s == null ? "yes" : "no");
        }
        System.out.println(System.currentTimeMillis() - start);
        System.out.println("Testing StringUtils method...");
        start = System.currentTimeMillis();
        for (String s : array) {
            System.out.println(StringUtils.isBlank(s) ? "yes" : "no");
        }
        System.out.println(System.currentTimeMillis() - start);

The Result

Testing of StringUtils.isNotNull vs native java method
======================================================
Testing conventional method...
no
yes
no
yes
no
0
Testing StringUtils method...
no
yes
no
yes
no
6

令我非常惊讶的是, native 方法比 Apache Commons Lang 库快得多。

The Question

谁能指出我的结果是否是决定性的?我的测试是否有可能是错误的,因此会出现这样的结果?谢谢。

最佳答案

注意:我强烈建议您查看 JMH http://openjdk.java.net/projects/code-tools/jmh/用于 Java 中的 microbenchamrk。

<小时/>

加载类时需要时间,在 String 示例中,该类已经加载。

编写基准测试时,您需要

  • 让代码预热至少 2 - 30 秒(取决于代码的复杂性)
  • 运行测试至少 5 到 30 秒。
  • 删除所有打印内容。写入控制台通常比大多数基本操作慢 10,000 倍。

任何几毫秒长的测试都可能是类似于加载类的时间。

Is there any chances that my test is wrong therefore such result?

您正在测试的操作应该是几十纳秒。 6 毫秒的结果可能会误差约 100,000 倍。

关于java - Apache Commons Lang StringUtils 较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071372/

相关文章:

java - 使用 schemaLocation 引用位于 jar 中的 XSD?

java - 如何在 Lucene 4.2.1 中实现基本的分析器?

regex - htaccess 无法正常工作

apache - Apache如何在本地添加域名?

php - 为什么 PHP exec() 命令启动 DOS 窗口?我可以隐藏这个吗?

java - 如何在 kafka 中初始化 kafka ConsumerRecords<String,String> 进行测试

java - 如果我在方法内初始化模型,为什么无法访问模型?

java - 从文件中读取并选择按价格对存储的对象数组进行排序不起作用

apache - 没有 RewriteCond 的 htaccess RewriteRule 不起作用

java - 检查Ant脚本中是否设置了环境变量