[解決済み] scala vs java、パフォーマンスとメモリ?[クローズド]
質問
私はScalaについて熱心に調べていますが、1つの基本的な質問に対する答えを見つけることができないようです。 一般的に、ScalaとJavaの間には、パフォーマンスやメモリの使用量に違いがあるのでしょうか?
どのように解決するのですか?
Scalaでは、気づかないうちに膨大な量のメモリーを簡単に使用することができます。 これは通常、非常に強力ですが、時折、迷惑になることがあります。 例えば、文字列の配列(
array
) と、それらの文字列からファイルへのマップ (
mapping
). 例えば、マップに含まれる、長さが2以上の文字列からなるファイルをすべて取得したいとします。 Javaでは、次のようになります。
int n = 0;
for (String s: array) {
if (s.length > 2 && mapping.containsKey(s)) n++;
}
String[] bigEnough = new String[n];
n = 0;
for (String s: array) {
if (s.length <= 2) continue;
bigEnough[n++] = map.get(s);
}
ふぅー 大変だったね。 Scalaでは、同じことをするのに一番コンパクトな方法は
val bigEnough = array.filter(_.length > 2).flatMap(mapping.get)
楽勝! しかし、コレクションの仕組みによほど詳しい人でない限り、この方法では中間配列が余分に作成されていることに気づかないかもしれません (この配列には
filter
のオブジェクトが追加され、さらに
配列の各要素
(を使用)。
mapping.get
これはオプションを返します)。 また、2つの関数オブジェクト(1つはフィルタ用、もう1つはflatMap用)が作成されますが、関数オブジェクトは小さいので、これはほとんど大きな問題ではありません。
つまり、基本的には、原始的なレベルでは、メモリの使用量は同じなのです。 しかし、Scalaのライブラリには、膨大な数の(通常は短命の)オブジェクトを非常に簡単に作成できる強力なメソッドが多数用意されています。 ガベージコレクタは通常、その種のゴミにかなり強いのですが、どのようなメモリが使われているかを全く知らずに行くと、おそらくJavaよりもScalaの方が早く問題に直面することになるはずです。
Computer Languages Benchmark GameのScalaコードは、Javaライクなパフォーマンスを得るために、かなりJavaライクなスタイルで書かれており、したがって、Javaライクなメモリ使用量になっていることに注意してください。 Scalaではこのようなことができます:高性能なJavaのコードのように見えるようにコードを書けば、高性能なScalaのコードになります。 (あなたは かもしれません より慣用的なScalaスタイルで書いても良いパフォーマンスが得られるかもしれませんが、それは仕様によります)。
プログラミングに費やした時間に対して、私のScalaコードは通常 より速く Scala では、パフォーマンスが重要でない面倒な部分をより少ない労力で終わらせ、パフォーマンスが重要な部分のアルゴリズムやコードの最適化にもっと注意を向けることができるからです。
関連
-
final, finally, finalizeの違いについて話してください。
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
java 例外。Javaツールの初期化
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
自動配線された依存性のインジェクションに失敗しました。
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
org.glassfish.jersey.servlet.ServletContainer
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
IDEA パッケージステートメントの欠落
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。