Kotlin中普通函数使用inline关键字是否具备优势?
Kotlin普通函数使用inline关键字是否有益?
对于没有函数类型参数的普通函数,加inline关键字几乎没好处,反而可能帮倒忙。
先明确你提到的高阶函数用inline的核心价值:高阶函数接收lambda参数时,编译器会生成匿名函数对象,调用时还会产生额外的栈帧开销。inline关键字会让编译器把高阶函数和lambda的代码直接复制到调用位置,彻底消除这些额外开销,所以能提升性能。
但普通函数(比如你写的sum函数)本身没有函数类型参数,常规函数调用的开销已经极小——现代JVM的JIT编译器会自动对频繁调用的普通函数做内联优化,完全不需要手动加inline。反而手动加inline会强制编译器把函数代码复制到每一个调用点,不管这个函数是不是热点代码,可能导致字节码膨胀,反而影响运行效率。
举个例子,你写的这个普通inline函数:
inline fun sum(x: Int, y: Int): Int { return x + y }
调用它时,编译器会直接把x + y的逻辑插入到调用位置,但这和JVM自动做的优化没有区别,甚至如果这个函数被很多地方调用,会让字节码变得冗余。
另外要注意,Kotlin的inline关键字本来就是为了解决高阶函数中lambda的开销问题设计的,官方也不建议在无函数参数的普通函数上使用inline。
内容的提问来源于stack exchange,提问作者mubir
相关产品推荐
相关产品推荐

