[解決済み] Scalaのlazy valの(隠れた)代償は何なのか?
2022-04-23 12:47:40
質問
Scalaの便利な機能の1つに
lazy val
を評価することができます。
val
は必要なときまで(最初のアクセス時)遅延されます。
もちろん
lazy val
Scala は値がすでに評価されたかどうかを追跡しなければなりませんし、複数のスレッドが同時に初めて値にアクセスしようとするかもしれないので、評価は同期化されなければなりません。
のコストとは一体何なのでしょうか?
lazy val
- に関連する隠されたブーリアン・フラグがあるのでしょうか?
lazy val
評価されたかどうか、同期されたものは何か、さらにコストはかかるのか?
さらに、こんなことをしたとします。
class Something {
lazy val (x, y) = { ... }
}
これは、2つの別々の
lazy val
s
x
そして
y
それとも、オーバーヘッドを得るのは一度だけなのでしょうか?
(x, y)
?
解決方法は?
からの引用です。
scalaメーリングリスト
の実装の詳細を説明します。
lazy
を(バイトコードではなく)Javaコードで表示します。
class LazyTest {
lazy val msg = "Lazy"
}
は、以下のJavaコードと同等のものにコンパイルされます。
class LazyTest {
public int bitmap$0;
private String msg;
public String msg() {
if ((bitmap$0 & 1) == 0) {
synchronized (this) {
if ((bitmap$0 & 1) == 0) {
synchronized (this) {
msg = "Lazy";
}
}
bitmap$0 = bitmap$0 | 1;
}
}
return msg;
}
}
関連
-
[解決済み] 実行時間(高速化)の計算方法
-
[解決済み] apacheサーバーがMaxClientsの設定に達したので、MaxClientsの設定を上げることを検討してください。
-
[解決済み] spark.sql.shuffle.partitionsとspark.default.parallelismの違いは何ですか?
-
[解決済み] 効率的なアウトオブコアソーティング
-
[解決済み] Dockerコンテナのランタイムパフォーマンスコストとは何ですか?
-
[解決済み] 最後の手段としてのパフォーマンス最適化戦略【終了しました
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】レイジーバルって何するもの?
-
[解決済み] あなたが見た中で最も馬鹿げたペシミゼーションは何ですか?[閉店]
-
[解決済み] Haskellプログラムにおけるガベージコレクションの一時停止時間の削減
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] apacheサーバーがMaxClientsの設定に達したので、MaxClientsの設定を上げることを検討してください。
-
[解決済み】HTTPとHTTPSのパフォーマンス比較
-
[解決済み】レイジーバルって何するもの?
-
[解決済み] 3Dゲームってなんであんなに効率的なの?[クローズド]
-
[解決済み] gccのffast-mathは実際に何をするのですか?
-
[解決済み] SSLはどれくらいのオーバーヘッドを発生させるのですか?
-
[解決済み] Scalaのlazy valの(隠れた)代償は何なのか?
-
[解決済み] Apache Spark: map vs mapPartitions?
-
[解決済み] あなたが見た中で最も馬鹿げたペシミゼーションは何ですか?[閉店]
-
[解決済み] Haskellプログラムにおけるガベージコレクションの一時停止時間の削減