0
点赞
收藏
分享

微信扫一扫

JAVA8新特性:Lambda 表达式使用方法(为什么慢探索)

梦想家们 2022-01-31 阅读 72


目录

​​demo​​

​​为什么慢?​​

Lambda表达式简洁,但是性能不佳。

demo

package com.nio4444.demo.java8;

import java.util.ArrayList;
import java.util.List;

public class LambdaDemo {
public static void main(String[] args) {
System.out.println("--1-------");
test1();

System.out.println();
System.out.println("--2-------");
test2();

System.out.println();
System.out.println("--3-------");
test3();
}

public static void test1(){
long stime0 = System.currentTimeMillis() ;
List list = new ArrayList();
for (int i = 0; i < 10000000; i++) {
list.add(i);
}
long stime = System.currentTimeMillis() ;
System.out.println("" + (stime-stime0));

for (int i = 0; i < list.size(); i++) { }
long stime1 = System.currentTimeMillis() ;
System.out.println("普通耗时:" + (stime1-stime));


for (Object o : list) {
// System.out.println(o.toString());
}
long etime = System.currentTimeMillis() ;
System.out.println("foreach耗时:" + (etime-stime1));

list.forEach( obj -> {
// System.out.println(obj.toString());
});
long etime2 = System.currentTimeMillis() ;
System.out.println("lambda耗时:" + (etime2-etime));
}

public static void test2(){
long stime0 = System.currentTimeMillis() ;
List list = new ArrayList();
for (int i = 0; i < 10000000; i++) {
list.add(i);
}
long stime = System.currentTimeMillis() ;
System.out.println("" + (stime-stime0));

for (int i = 0; i < list.size(); i++) { }
long stime1 = System.currentTimeMillis() ;
System.out.println("普通耗时:" + (stime1-stime));


for (Object o : list) {
// System.out.println(o.toString());
}
long etime = System.currentTimeMillis() ;
System.out.println("foreach耗时:" + (etime-stime1));

list.forEach( obj -> {
// System.out.println(obj.toString());
});
long etime2 = System.currentTimeMillis() ;
System.out.println("lambda耗时:" + (etime2-etime));
}

public static void test3(){
long stime0 = System.currentTimeMillis() ;
List list = new ArrayList();
for (int i = 0; i < 10000000; i++) {
list.add(i);
}
long stime = System.currentTimeMillis() ;
System.out.println("" + (stime-stime0));

for (int i = 0; i < list.size(); i++) { }
long stime1 = System.currentTimeMillis() ;
System.out.println("普通耗时:" + (stime1-stime));


for (Object o : list) {
// System.out.println(o.toString());
}
long etime = System.currentTimeMillis() ;
System.out.println("foreach耗时:" + (etime-stime1));

list.forEach( obj -> {
// System.out.println(obj.toString());
});
long etime2 = System.currentTimeMillis() ;
System.out.println("lambda耗时:" + (etime2-etime));
}

}

JAVA8新特性:Lambda 表达式使用方法(为什么慢探索)_i++


为什么慢?


应用程序初次使用Lambda时,必须加载用于生成Lambda类的框架,因此需要更多的编译,加载的时间

使用匿名内部类来实现lambdas,编译器为每个匿名内部类生成一个新的类文件,这会影响应用程序的启动性能,加载可能是一个昂贵的操作,包括磁盘I/O和解压缩JAR文件本身。



举报

相关推荐

0 条评论