【问题标题】:Kotlin uses runtime assertions for null checking - Performance overhead?Kotlin 使用运行时断言进行空值检查 - 性能开销?
【发布时间】:2015-10-21 18:33:57
【问题描述】:

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

如果有关闭它的选项?

【问题讨论】:

    标签: performance simulation kotlin


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多