2015-07-30 22 views
7

Sto considerando Kotlin per un framework di simulazione e ho notato che il compilatore intreccia le chiamate statiche checkParameterIsNotNull dopo per ogni metodo a cui è possibile accedere da java. Questo controlla che il parametro method non sia nullo accedendo (e facendo dumping?) Allo stack di chiamate ogni volta che viene eseguito questo metodo. Ora che in un tipico quadro di simulazione il conteggio delle esecuzioni potrebbe essere a milioni, mi chiedo quale sia l'impatto sulle prestazioni di tale funzione.Kotlin utilizza asserzioni di runtime per il controllo nullo - Sovraccarico delle prestazioni?

Se esiste un'opzione per disattivarlo?

risposta

17

Prima di tutto, lo stack di chiamate non è accessibile e scaricato ogni volta che si esegue il metodo. Durante l'esecuzione normale, viene eseguito solo un controllo null singolo, che non ha alcun overhead evidente. Lo stack di chiamate è accessibile solo quando il parametro è nullo e deve essere generata un'eccezione.

Le asserzioni non vengono generate per i metodi privati ​​(perché non possono essere chiamati dal codice Java e il compilatore Kotlin assicura che il codice Kotlin che chiama il metodo non passi alcun valore nullo). Pertanto, il modo migliore per evitare completamente l'overhead è scrivere il ciclo interno del codice di simulazione utilizzando metodi privati.

È possibile disabilitare la generazione dell'asserzione utilizzando le opzioni -Xno-param-assertions e -Xno-call-assertions per il compilatore della riga di comando. Si noti che queste opzioni non sono supportate e potrebbero essere rimosse in futuro.

Problemi correlati