2017-03-21 13 views
1

ラーメン関数でローカル変数を使用するとき、私はスケーリングを学習しているので、最適化について疑問を抱いていました。例えばスカラーラムダ関数とローカル変数

次のコード:

val My_List = l.map{x => 
    val a = coomplexFun(x.attr_1, x.attr_2) ; 
    (x.attr_1, doSomthing(a)) 
} 

は、それは同等です:

val My_List = l.map{x => 
    (x.attr_1, doSomthing(coomplexFun(x.attr_1, x.attr_2))) 
} 

または、いくつかの余分なメモリ割り当てのコストはありますか?

答えて

1

JIT/Hotspotコンパイラは、必要に応じて最適化するため、実行時には同等です。コンパイルされたクラスは、デバッガの情報を含んでいるため、少し大きめになります。ローカル変数の名前

+0

Scalaのすべての実装にJITがあるわけではありません。実際、Scalaの実装にはJITがありません。 Scala-nativeは、ネイティブのマシンコードにコンパイルする静的なAOTコンパイラです。 Scala.jsは静的なAOTコンパイラで、ECMAScriptソースコードにコンパイルされます。そのコードは、JITを備えた実行エンジン上で実行されても実行されなくてもよい。 Scala-JVMは、JVMLバイトコードにコンパイルする静的AOTコンパイラです。そのバイトコードは、JITを備えた実行エンジン上で実行されても実行されなくてもよい。例えば。 Excelsior JET JVMにはJITがありません。また、JVMのバイトコードをAndroidのバイトコードにコンパイルして、... –

+0

... JITを持たないARTによって実行されます。 –

関連する問題