inline函数

使用高阶函数会有运行时的开销:每个函数都是一个对象,并且函数会持有一个闭包。比如函数方法体中的访问变量。内存分配(函数和类的内存分配)和虚拟调用导致运行时开销。在大多数情况下,这种开销都是可以通过inline lambda表达式消除影响,如下例所示:

lock(l) { foo() }

编译器可能会替换创建函数对象以及产生一次调用的方式,而采用下面的方式:

l.lock()
try {
    foo()
}
finally {
    l.unlock()
}

为了让编译器做这样的工作,我们只需要将lock函数标记为inline:

inline fun <T> lock(lock: Lock, body: () -> T): Unit {}

inline修饰符影响函数和传入的lambda表达式,它们都会被嵌入到调用位置。inline可能会导致生成的代码量增加,但是如果以合理的方式(不要inline大的功能函数)使用,将会增加性能,特别是循环中。

results matching ""

    No results matching ""