Scala Performance Tuning Tips

1,968 views
1,785 views

Published on

ぷろぐぱ http://atnd.org/event/E0021897 の発表資料

1 Comment
12 Likes
Statistics
Notes
No Downloads
Views
Total views
1,968
On SlideShare
0
From Embeds
0
Number of Embeds
74
Actions
Shares
0
Downloads
3
Comments
1
Likes
12
Embeds 0
No embeds

No notes for slide

Scala Performance Tuning Tips

  1. 1. Scala Performance Tuning Tips 水島宏太
  2. 2. 自己紹介 n  n  n  Twitter: @kmizu GitHub: https://github.com/kmizu Scalaの普及活動やってます n  n  Scala Conference in Japan 座長 形式言語、構文解析好き n  n  プログラミング言語Onionを開発 新しい言語も開発中
  3. 3. トレードマーク?
  4. 4. アジェンダ n  n  n  n  n  n  Scalaの概要 Scalaの性能特性 Java VMの特性 デモ:向聴数計算プログラム Scala特有のはなし まとめ
  5. 5. Scalaとは n  JVM上で動作するプログラミング言語 ※言語と処理系は本来分けて論じるべき n  JVMのクラスファイルにコンパイル n  静的型付きオブジェクト指向言語 関数型プログラミングも積極的に支援 n 
  6. 6. Scala略式年表 n  2003年:誕生 n  2006年:Scala 2.0 n  2008年:Twitterで採用開始 n  2011年:Typesafe社設立
  7. 7. Fibonacci in Scala object Fibonacci { def main(args :Array[String]) = { lazy val fib: Stream[Int] = 0 #:: 1 #:: fib.zip(fib.tail).map{ case (a, b) => a + b } println(fib.take(10).toList) } } //=> List(0, 1, 1, 2, 3, 5, 8, 13, 21, 34)
  8. 8. Scalaの性能特性 n  ほとんどの場合は十分な性能 n  n  Javaと本当に同程度の速度を出す方法 n  n  n  n  たまにかなり遅くなる事がある 高階関数を使わない 変更可能なコレクションだけを使う 縛りプレイは止めよう JVMを知ろう n  楽して高速化する
  9. 9. Java VMの特性(Java/Scala共通) n  高度な最適化コンパイラ n  n  簡単なチューニングは効果が薄い n  n  n  n  特に所謂Server VM(C2コンパイラ) メソッドのインライン化 フィールドへの直接アクセス staticメソッドを使う メモリ管理のチューニングは効果的 n  どこでオブジェクトを確保しているか
  10. 10. デモ:向聴数計算プログラム https://github.com/kmizu/shanten_benchmark
  11. 11. Scala特有のはなし n  メモリ確保箇所を見落としがち n  注意する必要がある項目: n  n  n  n  無名関数 for構文:無名関数が作られる implicit conversion(< Scala 2.10) boxing/unboxing n  基本型相当のオブジェクトの出し入れ時
  12. 12. やってはいけない n  闇雲に全体をJava風に書き換える n  n  n  n  高階関数をループ構文に置き換える implicit conversionを使わない for構文をループに置き換える ボトルネックを見極める n  n  メモリ確保回数が異常に多い箇所 使えるならプロファイラを使う
  13. 13. まとめ n  Java VMを知ることが高速化への近道 n  n  Java風コードへの書き換えは慎重に n  n  特にメモリ確保・GCの仕組み 効果があまりない場合も多い 隠れたメモリ確保に注意をはらう n  boxing/unboxingは見落としがち
  14. 14. もっとJava VMを知りたい人へ n  Java仮想マシン仕様を読む n  OpenJDKのソースコードを読む n  詳しい人と一緒に読みましょう n  n  心が折れます クラスファイルを逆アセンブルする n  javap! javap!
  15. 15. Java VMに関する余談 n  意外な最適化が効果的なこともある n  インタフェース型→クラス型への置換 n  n  剰余演算→ビット演算への置換 n  n  invokeinterface, invokevirtualの違い Java VMでも効く Java VMの進化で無効になるかも

×