ななめ45°から見たJavaOne

  • 1,724 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,724
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
6
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ~ネイティブな世界に注目して~2011/11/14末永 恭正 ( @YaSuenag )
  • 2. 自己紹介 すえなが やすまさ 末永 恭正(@YaSuenag) NTT OSSセンタ勤務 ◦ Javaの障害解析、Q&A対応  合言葉は「Javaいい子だから!」  hs_errログやコアの解析  Javaとlibc、Linuxカーネルの間を行ったり来たり… ◦ たま~にOpenJDKのパッチ書いてます 根っからのサンデープログラマー ◦ Object Pascal (Delphi) 大好き ◦ CとJavaも好き ◦ アセンブラも結構好き JavaOne歴:2年(2010 & 2011)
  • 3. JavaOneで感じたこと 求められるスキルの2極化 (EE vs SE) ◦ EE  とりあえず「クラウド」  とにかく「ポータビリティ」!  EoD対 ◦ SE極  とりあえず「並列化」  マルチリンガル?なVMの実現  VMの作りや動きを意識  究極を目指すなら、マシンを意識した領域へ…今回の注目ポイント!
  • 4. まずは事例から…
  • 5. みんなどうしてる?Tuning Twitterの場合時間切れ
  • 6. みんなどうしてる?Tuning Twitterの場合 !!! java.lang.Integer (32bit)
  • 7. みんなどうしてる?Tuning  Twitterの場合 ◦ GCのチューニングをきめ細かく実施 ◦ GCコストを下げるため、VM内部のC++オブジェクト表現 (oop)まで意識  クラスの継承関係やフィールドの型・数から、実際の消費メモリ 量を見積もりメモリ負荷を考え抜いたチューニング
  • 8. みんなどうしてる?Tuning Goldman Sachsの場合
  • 9. みんなどうしてる?Tuning Goldman Sachsの場合 ◦ hsdisを使ったディスアセンブル http://wikis.sun.com/display/HotSpotInternals/PrintAssemblyスカラ演算…
  • 10. みんなどうしてる?Tuning Goldman Sachsの場合 ◦ ハードウェア関連情報のチェック  キャッシュのミスヒット(CPUキャッシュ・TLBなど)  etc…
  • 11. みんなどうしてる?Tuning Goldman Sachsの場合 ◦ Large Page
  • 12. みんなどうしてる?Tuning  Goldman Sachsの場合 ◦ OSやハードウェアまで含む最適化 ◦ JVMのハードウェア最適化を信頼しながらも、さらなる ファインチューニング  メモリアクセス  命令コード「ナノ秒レベル」のチューニング
  • 13. ※GC以外ななめ45°下からチューニングポイントを覗き見る
  • 14. その1: Superword 単純なベクトル化 SSE / AVX命令を有効活用できるはず ◦ プロセッサの本領発揮! JDK7 RIにもUseSuperWordが存在するが、ベクトル化 の実装のみ
  • 15. その1: Superword ①64bit転送→256bit転送 ②スカラ演算→パックド演算 ③ jj++ → jj +=4
  • 16. その1: Superword
  • 17. その2: Compressed String 文字列内部表現をbyte配列で扱う SSE4の文字列処理系命令が使用される Java7のString switchで効果絶大!? OpenJDKには実装がありません…
  • 18. その3: 細かいオプション OptimizeFill ◦ java.util.Arrays.fill()のような、単純な配列書き 込みループをVMの最適化済みメソッドの置換する ◦ JDK7 RIではSSE命令(MOVDQUなど)を使ったメモリ転 送命令に置換される ◦ サポートされるプリミティブ型のビット幅は32bitまで /** * Assigns the specified int value to each element of the specified array * of ints. * * @param a the array to be filled * @param val the value to be stored in all elements of the array */ public static void fill(int[] a, int val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; } UseFPUForSpilling ◦ スタックメモリアクセスで浮動小数レジスタ(SSEの場合 はXMMレジスタ)を積極的に活用 ◦ GPRを使い切るような、ローカル変数が多数登場する場合 に効果が見込める
  • 19. その3: 細かいオプション
  • 20. その4: ガリガリ書く!! ”Write Once, Run Anywhere” に敢えて逆行してみる
  • 21. 低レベル好きエンジニアなら誰もが(?)気になるC/C++ VS Java
  • 22. 永遠の?テーマ:C vs Java 去年もあったテーマ 2010 2011
  • 23. 永遠の?テーマ:C vs Java 内容:結構一般的な話 ◦ 最適化手法  C++の静的 VS Javaの動的  実際に動きながらプロファイルできるのがJavaの強み ◦ メモリ管理  mallocって、鬼速いわけではない(特にマルチスレッド環境)  UseNUMA / UseCompressedOops / UseLargePagesでパフォーマ ンスを上げられるかも ◦ 同時並行性  C++はpthreadやboostでマルチスレッドが実現できるが、使うのが なかなか大変  Javaはカンタン  java.util.concurrent  Fork/Join  バイアスロックで排他制御周りの性能向上まで見込める
  • 24. 永遠の?テーマ:C vs Java で、どっちがいい? !!!
  • 25. 永遠の?テーマ:C vs Java  評価軸 ◦ パフォーマンス ◦ スケーラビリティ ◦ etc…  ビジネス要素 ◦ TCO ◦ ROI ◦ etc…  保守 ◦ アプリケーションの想定使用期限まで、技術的にサポート が可能か?関係者全員で合意をとりましょう! ~決めるのはアナタです~
  • 26. Thank You!!
  • 27. 今回使わせていただいた資料 Everything I Ever Learned About JVM Performance Tuning at Twitter https://oracleus.wingateweb.com/published/oracleus2011/sessions/37941/S37941_2408980.p df Every Last Nanosecond: Tuning the JVM for Extreme Low Latency https://oracleus.wingateweb.com/published/oracleus2011/sessions/20262/20262_Cho144249. pdf From Java Code to Java Heap: Understanding the Memory Usage of Your Application https://oracleus.wingateweb.com/published/oracleus2011/sessions/24001/S24001_138281.pd f Attack on Scaling: Methods and Tools for Eradicating Performance Bottlenecks https://oracleus.wingateweb.com/published/oracleus2011/sessions/20580/20580_Cho156823. pdf Blazing JVM Performance: Trends Fueled by the Latest Hardware and JVM Optimizations https://oracleus.wingateweb.com/published/oracleus2011/sessions/18540/S18540_2625060.p df Java or C++: Practical Advice You Can Use https://oracleus.wingateweb.com/published/oracleus2011/sessions/24029/S24029_239397.pd f