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

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

如果有一个选项可以关闭它?

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

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

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