Kotlin 使用运行时断言进行空检查——性能开销?

Kotlin uses runtime assertions for null checking - Performance overhead?

我正在考虑将 Kotlin 用作模拟框架,并注意到编译器在可以从 java 访问的每个方法之后交织静态 checkParameterIsNotNull 调用。每次此方法为 运行 时,都会通过访问(和转储?)调用堆栈来检查方法参数是否不为空。现在,在典型的模拟框架中,运行 的数量可能达到数百万,我想知道这种功能对性能的影响。

是否有关闭它的选项?

首先,每次方法运行都不会访问和转储调用堆栈。在正常执行期间,只执行一次空检查,没有任何明显的开销。只有当参数为null需要抛出异常时才会访问调用栈。

不会为私有方法生成断言(因为无法从 Java 代码调用它们,并且 Kotlin 编译器确保调用该方法的 Kotlin 代码不会传递任何空值)。因此,完全避免开销的最佳方法是使用私有方法编写模拟代码的内部循环。

您可以使用命令行编译器的 -Xno-param-assertions-Xno-call-assertions 选项禁用断言生成。请注意,这些选项不受支持,将来可能会被删除。