kotlin中的内联函数inline

在 JVM 上,我们定义的 lambda 会以对象实例的形式存在。 JVM 会为所有同 lambda 打交道的
变量分配内存,这就产生了内存开销。更糟的是, lambda 的内存开销会带来严重的性能问题。显
然,这种性能问题应当避免。

可以看到,使用lambda表达式时,编译后,实际会通过反射以及创建了相关的局部变量;

幸运的是, Kotlin 有一种优化机制叫内联,可以解决 lambda 引起的内存开销问题。有了内联,
JVM 就不需要使用 lambda 对象实例了,因而避免了变量内存分配。
为了使用内联方法优化 lambda,以 inline 关键字标记使用 lambda 的函数即可:

 有了 inline 关键字后,调用 runSimulation 函数就不会使用 lambda 对象实例了 。哪里需
要使用 lambda,编译器就会将函数体复制粘贴到哪里。

可以看到, runSimulation 函数没有被调用。现在, runSimulation 函数调用 lambda 执行
的工作已直接内联到 main 函数里了。这避免了 lambda 函数的传递,因此也就不需要创建新的对
象实例了。
 

注意:使用 inline 关键字标记使用 lambda 的函数是个好主意。 然而, 有时却不一定行。
例如,使用 lambda 的递归函数就无法内联,因为内联递归函数会让复制粘贴函数体的行为无限
循环。如果你非要尝试,编译器也会发出警告并阻止你这么做。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值