fun main(args: Array) {
for (i in 0…10) {
sum(1, 2) { println(“Result is: $it”) }
}
}
我在循环中调用 sum 函数,每次传递一个 lambda 打印结果。反编译为 Java:
for(byte var2 = 10; var1 <= var2; ++var1) {
sum(1, 2, (Function1)null.INSTANCE);
}
可见在每次循环里都会创建一个 Function1 的实例对象。这里就是性能的优化点所在,如何避免在循环里创建新的对象?
1.在循环外部创建 lambda 对象
val l: (r: Int) -> Unit = { println(it) }
for (i in 0…10) {
sum(1, 2, l)
}
反编译为 Java:
Function1 l = (Function1)null.INSTANCE;
int var2 = 0;
for(byte var3 = 10; var2 <= var3; ++var2) {
sum(1, 2, l);
}
只会创建一个 Function 对象
2.使用 inline:
fun main(args: Array) {
for (i in 0…10) {
sum(1, 2) { println(“Result is: $it”) }
}
}
inline fun sum(a: Int, b: Int, lambda: (result: Int) -> Unit): Int {
val r = a + b
lambda.invoke®
return r
}
反编译为 Java:
public static final void main(@NotNull String[] args) {
//…
int var1 = 0;
for(byte var2 = 10; var1 <= var2; ++var1) {
byte a i v = 1 ; i n t b iv = 1; int b iv=1;intbiv = 2;
int r i v = a iv = a iv=aiv + b i v ; S t r i n g v a r 9 = " R e s u l t i s : " + r iv; String var9 = "Result is: " + r iv;