我在lambda vs方法参考上运行了一些JMH测试,看起来类似于:
IntStream......reduce(Integer::max)
vs.
IntSream.......reduce((i1, i2) -> Integer.max(i1, i2))
Run Code Online (Sandbox Code Playgroud)
我注意到的是,与Java中的lambda相比,方法引用的执行速度大约是lambda的5倍。当我在Java 11中运行测试时,两种方法的执行时间都与Java中方法引用的执行速度差不多。 8.因此,Java 11中的lambda和方法引用之间在性能上没有重大区别。
我的问题是:从Java 8到11进行了哪些改进以提高性能?我正在使用OpenJDK。
编辑我的基准:
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Benchmark)
@Fork(value = 1, jvmArgs = {"-XX:CompileThreshold=5000"})
@Warmup(iterations = 2)
public class FindMaxInt {
@Param({"10000", "1000000", "10000000"})
private int n;
private List<Integer> data;
@Setup
public void setup(){
data = createData();
}
@Benchmark
public void streamWithMethodReference(final Blackhole blackhole){
int max = data.stream().mapToInt(Integer::intValue).reduce(Integer.MIN_VALUE, Integer::max);
blackhole.consume(max);
}
@Benchmark
public void streamWithLambda(final Blackhole blackhole){
int max = data.stream().mapToInt(Integer::intValue).reduce(Integer.MIN_VALUE, (i1, i2) -> Integer.max(i1, i2));
blackhole.consume(max);
}
Run Code Online (Sandbox Code Playgroud) 我想尝试在我的应用中检测来电.我从头开始创建一个新的Swift项目,只是为了尝试一些代码.我唯一做的就是在每个新项目创建的ViewController中导入CoreTelephony,我还将viewDidLoad()更改为:
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let callCenter = CTCallCenter()
NSLog("start")
callCenter.callEventHandler = {[weak self] (call: CTCall) -> () in
self?.label.text = call.callState
NSLog("Call state")
NSLog(call.callState)
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过没有[弱自我],因为我是新手,并且不确定它需要什么.
当我通过手机上的XCode运行我的新小应用程序时,收到呼叫,断开连接或其他任何事情都没有任何反应.什么都没有错误.为了使用CoreTelephony框架和CTCallCenter,我还需要做些什么吗?
关心约翰