Kotlin utiliza aserciones de time de ejecución para la comprobación nula – ¿Sobrecarga de performance?

Estoy considerando Kotlin para un marco de simulación y noté que el comstackdor entrelaza las llamadas estáticas checkParameterIsNotNull para cada método al que se puede acceder desde java. Esto comtesting si el parámetro del método no es nulo accediendo (¿y volcando?) A la stack de llamadas cada vez que se ejecuta este método. Ahora que en un marco de simulación típico el recuento de ejecuciones podría ser de millones, me pregunto sobre el impacto en el performance de tal característica.

Si hay una opción para apagarlo?

En primer lugar, no se accede a la stack de llamadas y se descarga cada vez que se ejecuta el método. Durante la ejecución normal, solo se realiza una única comprobación nula, que no tiene ninguna sobrecarga perceptible. Solo se accede a la stack de llamadas cuando el parámetro es nulo y se debe lanzar una exception.

Las aserciones no se generan para los methods privados (porque no se pueden llamar desde el código de Java, y el comstackdor de Kotlin asegura que el código de Kotlin que llama al método no pasa ningún valor nulo). Por lo tanto, la mejor manera de evitar la sobrecarga por completo es escribir el bucle interno de su código de simulación utilizando methods privados.

Puede desactivar la generación de afirmaciones utilizando las -Xno-param-assertions y -Xno-call-assertions para el comstackdor de command-line. Tenga en count que esas opciones no son compatibles y podrían eliminarse en el futuro.