`
zyz611
  • 浏览: 95971 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JAVA8 lambda执行效率

    博客分类:
  • java
 
阅读更多
package lambdaPerfmTest;

import org.junit.Test;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
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.security.SecureRandom;
import java.util.*;
import java.util.concurrent.TimeUnit;


public class PerfTest {

    private static List<Integer> integers = new ArrayList<>();

    public static final int size = 100000;
    {
        SecureRandom random = new SecureRandom();
        for (int i = 0; i < size; i++) {
            int i1 = random.nextInt(size);
            integers.add(i1);
        }
    }

    @Benchmark
    @OutputTimeUnit(TimeUnit.MILLISECONDS)
    @BenchmarkMode(Mode.AverageTime)
    public int iteratorMaxInteger() {

        int max = Integer.MIN_VALUE;
        for (Iterator<Integer> it = integers.iterator(); it.hasNext(); ) {
            max = Integer.max(max, it.next());
        }
        return max;
    }

    @Benchmark
    @OutputTimeUnit(TimeUnit.MILLISECONDS)
    @BenchmarkMode(Mode.AverageTime)
    public int forEachLoopMaxInteger() {
        int max = Integer.MIN_VALUE;
        for (Integer n : integers) {
            max = Integer.max(max, n);
        }
        return max;
    }

    @Benchmark
    @OutputTimeUnit(TimeUnit.MILLISECONDS)
    @BenchmarkMode(Mode.AverageTime)
    public int forMaxInteger() {
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < size; i++) {
            max = Integer.max(max, integers.get(i));
        }
        return max;
    }

    @Benchmark
    @OutputTimeUnit(TimeUnit.MILLISECONDS)
    @BenchmarkMode(Mode.AverageTime)
    public int parallelStreamMaxInteger() {
        Optional<Integer> max;
        max = integers.parallelStream().reduce(Integer::max);
        return max.get();
    }

    @Benchmark
    @OutputTimeUnit(TimeUnit.MILLISECONDS)
    @BenchmarkMode(Mode.AverageTime)
    public int lambdaMaxInteger() {
        return integers.stream().reduce(Integer.MIN_VALUE, (a, b) -> Integer.max(a, b));
    }

    public static void main(String[] args) throws RunnerException {
        Options opt = new OptionsBuilder()
                .include(PerfTest.class.getSimpleName())
                .warmupTime(TimeValue.seconds(1))
                .forks(1)
                .build();

        new Runner(opt).run();
    }

    @Test
    public void test()
    {
        time(new PerfTest()::parallelStreamMaxInteger);
    }




    public void time(Runnable run) {
        long startTime = System.currentTimeMillis();
        System.out.println("startTime = " + startTime);

        run.run();

        long endTime = System.currentTimeMillis();
        System.out.println("endTime = " + endTime);
        System.out.println("###################");
        long cost = endTime - startTime;
        System.out.println("cost = " + cost);

    }

    public void time(Runnable... runList) {
        for (Runnable runnable : runList) {
            time(runnable);
        }
    }

   /* public static void main(String[] args) {
        PerfTest test = new PerfTest();
        test.time(test::forEachLoopMaxInteger, test::forMaxInteger, test::iteratorMaxInteger, test::lambdaMaxInteger, test::parallelStreamMaxInteger);
    }*/


}



JMH执行结果:
Benchmark                                          Mode  Cnt  Score   Error  Units
lambdaPerfmTest.PerfTest.forEachLoopMaxInteger     avgt   20  1.026 ± 0.023  ms/op
lambdaPerfmTest.PerfTest.forMaxInteger             avgt   20  0.650 ± 0.016  ms/op
lambdaPerfmTest.PerfTest.iteratorMaxInteger        avgt   20  1.018 ± 0.030  ms/op
lambdaPerfmTest.PerfTest.lambdaMaxInteger          avgt   20  1.687 ± 0.041  ms/op
lambdaPerfmTest.PerfTest.parallelStreamMaxInteger  avgt   20  0.747 ± 0.021  ms/op

从结果来看,并行执行效率有提升,lamdba执行效率慢了60%。
分享到:
评论

相关推荐

    java8lambda表达式Demo

    Lambda表达式还可以与Java 8的并行流(Parallel Stream)结合,利用多核处理器的优势进行并行计算,提高程序执行效率。例如: ```java long sum = numbers.parallelStream().mapToInt(Integer::intValue).sum(); ``` ...

    java8 lambda表达式学习总结

    Java 8 的 Lambda 表达式是其最显著的新特性之一,它引入了一种更为简洁、函数式的编程风格。Lambda 表达式使得处理匿名函数变得更加简单,尤其在需要定义短小、无状态的代码块时,它们可以极大提高代码的可读性和...

    java8 Lambda 实践

    Java 8 的 Lambda 实践是 Java 语言的一个重要更新,引入了函数式编程的概念,极大地简化了处理集合和回调函数的方式。Lambda 表达式是这一特性的重要组成部分,它允许我们以更简洁、更易读的形式来表示匿名函数。...

    Java 8新特性之Lambda与函数式编程.pdf

    Java 8是Java语言发展史上一个重要的里程碑,它引入了多种新特性,旨在增强Java语言表达能力和提升开发效率。其中,Lambda表达式和函数式编程的支持是最具影响力的变化之一。 函数式编程是一种编程范式,它将计算视...

    Java8的lambda表达式

    Lambda表达式使得代码更加简洁、易读,同时也提升了程序的执行效率。在本文中,我们将深入探讨Lambda表达式的核心概念、语法以及它在实际开发中的应用。 一、Lambda表达式基础 1. **什么是Lambda表达式?** ...

    Java 1.8 lambda表达式示例源码

    总而言之,Java 1.8的lambda表达式使得代码更简洁、更易读,它与函数式接口和Stream API结合,大大增强了Java在处理数据和执行任务时的灵活性。学习和熟练掌握这些特性,对于提升Java开发效率和代码质量至关重要。

    Java8集合 CompletableFuture lambda表达式 新的TimeAPI 和ForkJoin Demo包

    Java 8 是一个重要的 Java 发行版本,引入了许多新特性,极大地提升了开发效率和代码的可读性。在这个"Java8集合 CompletableFuture lambda表达式 新的TimeAPI 和ForkJoin Demo包"中,我们可以深入探讨以下几个关键...

    Java Lambda 环绕执行模式.pdf

    Java Lambda 表达式是Java 8引入的一种新特性,它极大地简化了代码,特别是处理函数式编程场景。Lambda表达式本质上是匿名函数,可以作为参数传递,也可以被存储和复用。在Java中,它们通常与接口一起使用,这些接口...

    Java8里面lambda的最佳实践Java开发Java经

    以上内容涵盖了Java 8 Lambda的最佳实践,通过熟练掌握这些技巧,可以提升Java开发的效率和代码质量。在实际开发中,结合Java 8的新特性,如Stream API和Optional类,可以使代码更加简洁、高效。

    Java8 Lambda表达式模板方法实现解析

    Java8 Lambda表达式是Java语言的一个重要特性,它引入了函数式编程的概念,极大地简化了对匿名函数的处理。...通过理解并熟练掌握Lambda表达式和注解,开发者可以更好地利用Java8的特性,提升代码质量和开发效率。

    java lambda 表达式(语言篇和类库篇)

    总的来说,Java Lambda表达式与相关的类库更新,如Stream API和日期时间API,共同提升了Java的编程效率和代码可读性,使得开发者能够以更简洁的方式处理复杂任务,尤其在处理大量数据和并发场景下。理解并熟练运用...

    Java Lambda表达式方法使用详解.docx

    Java Lambda表达式是Java 8引入的一个重要特性,它标志着Java开始支持函数式编程风格。在传统的面向对象编程中,我们通常通过创建对象并调用其方法来执行任务。而函数式编程则更加关注结果,而不是执行任务的具体...

    java8看不到源码-java8-lambda-samples:伴随我关于Java8lambda表达式的闪电演讲的代码

    Java 8 是一个重要的 Java 发行版本,引入了许多新特性,尤其是对函数式编程的...通过这些示例,你可以深入理解 Java 8 的 lambda 表达式以及与之相关的语言特性,并将它们应用到自己的项目中,提升代码质量与效率。

    java8新特性(Stream,lambda等)

    Java 8是Java语言的一个重要版本,引入了许多创新特性,极大地提升了开发效率和代码的可读性。其中,Stream API和Lambda表达式是最为显著的两大亮点,它们为处理集合数据提供了新的方式,并且简化了多线程编程。下面...

    Java8 流式Lambda相关案例

    Java8 是一个重要的Java语言版本,它引入了许多创新特性,其中最引人注目的就是流(Stream)API和Lambda表达式。这两个特性极大地提升了Java在处理集合数据时的效率和可读性,使得代码更加简洁、高效。在这个“Java8...

    Jdk 8 lambda 表达式使用示范

    Java 8 是一个重要的版本更新,它引入了许多新特性,其中最引人注目的就是Lambda表达式和Stream API。这两个特性极大地提升了Java处理集合数据的能力,使得代码更加简洁、高效。接下来,我们将深入探讨Lambda表达式...

    Java+8实战_Java8_java8_

    8. **平行流(Parallel Streams)**:流API支持并行处理,可以充分利用多核处理器的优势,提高程序执行效率。`Collection.parallelStream()`方法创建一个并行流。 9. **Map接口增强**:`Map`接口增加了一些新的方法,...

    java8-lambda表达式的基础使用.pdf

    Java 8 中 Lambda 表达式的基础使用 ...在 Java 8 中,Lambda 表达式是一个非常强大的工具,它可以帮助我们简洁地实现接口函数的实现,并且可以提高编码效率。但是,需要注意其缺点,并且尽量将其用在适合的地方。

    java8新特性,Lambda表达式

    Java 8是Java编程语言的一个重大更新,引入了许多新特性,其中最为显著的就是Lambda表达式。Lambda表达式是函数式编程的关键元素,它允许我们以更简洁的方式编写匿名函数,从而简化了处理集合数据和事件驱动编程的...

    java8_32.zip

    7. ** Nashorn JavaScript引擎**:Java 8内置了Nashorn JavaScript引擎,使得Java可以直接执行JavaScript代码,实现了Java与JavaScript之间的互操作性。 二、安装与配置 1. **下载与解压**:首先需要下载"java8_32...

Global site tag (gtag.js) - Google Analytics