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