gpt4 book ai didi

java - Java 8 中可序列化 lambda 的性能

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:55 25 4
gpt4 key购买 nike

我在 Brian Goetz 的一些评论中读到,可序列化的 lambda“与不可序列化的 lambda 相比,性能成本要高得多”。

我现在很好奇:开销到底在哪里,是什么原因造成的?它只影响 lambda 的实例化,还是影响调用?

在下面的代码中,这两种情况( callExistingInstance() 和 callWithNewInstance() )都会受到“MyFunction”的可序列化性的影响,还是只有第二种情况?

interface MyFunction<IN, OUT> {
OUT call(IN arg);
}

void callExistingInstance() {

long toAdd = 1;
long value = 0;

final MyFunction<Long, Long> adder = (number) -> number + toAdd;

for (int i = 0; i < LARGE_NUMBER; i++) {
value = adder.call(value);
}
}

void callWithNewInstance() {

long value = 0;

for (int i = 0; i < LARGE_NUMBER; i++) {
long toAdd = 1;

MyFunction<Long, Long> adder = (number) -> number + toAdd;

value = adder.call(value);
}
}

最佳答案

性能下降发生在序列化/反序列化和实例化时。只有你的第二个例子受到打击。它昂贵的原因是当你反序列化时,你的 lambda 的底层类是通过一种特殊的反射(具有创建/定义类的能力)而不是普通的旧序列化对象(类定义从哪里来的)实例化的来自?),以及执行一些安全检查...

关于java - Java 8 中可序列化 lambda 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com