タグ

パフォーマンスに関するNagiseのブックマーク (19)

  • JMH - Javaでのベンチマークを試してみる - 覚えたら書く

    OpenJDK のサイトで公開されているマイクロベンチマーク用のライブラリ。Java Microbenchmark Harness の略。 JMHの存在理由 Javaでパフォーマンス測定(ベンチマーク取得)するのは以下のような理由により簡単ではありません 計測用のコードを書くのが実は難しい 計測用のコードの書き方がまずいと、コンパイラにより最適化で処理部分を削ってしまう場合がある ウォームアップが必要 JITコンパイラによってコンパイルされているかどうかで測定結果が大きく異なる こういう問題を解消して計測してくれるのがJMHです。(OpenJDKで公開されているので、Java公式ツールといってよいでしょう) 使い方(概要) JMHを使った計測の流れは大まかに以下の通りです(Mavenを用いてIDE上で実行する例です) JMHでの計測用のMavenプロジェクトを作成する ↓ 計測したい処理を

    JMH - Javaでのベンチマークを試してみる - 覚えたら書く
  • 動的配列について – JavaのLinkedListとArrayListを分析・比較する | POSTD

    私はSkienaの『Algorithm Design Manual』 (訳注:『アルゴリズム設計マニュアル』 上巻 ・ 下巻 ) を読んでいました。ところでこのは素晴らしいで、連結リストと配列についてこんな比較をしていました(chapter 3.1.3)。 連結リストが静的配列に勝る相対的な長所には以下のものがあります。: • メモリが当にいっぱいにならない限り、連結構造にオーバーフローが生じない。 • 連続的な(配列)リストに比べて、挿入と削除が単純である。 • 大きなレコードを扱う場合、要素自体を動かすよりもポインタを動かすほうが容易かつ高速である。 一方で、配列の相対的な長所には以下のものがあります。 • 連結構造には、ポインタのフィールドを格納するための余計な領域が必要となる。 • 連結リストでは、要素に対する効率的なランダムアクセスができない。 • 配列は、ランダムなポイン

    動的配列について – JavaのLinkedListとArrayListを分析・比較する | POSTD
  • introdunction to SIMD programming - primitive: blog

    Unite 2015 Tokyo の講演で詳細を話せなかったのが心残りだったので、大量のオブジェクトの更新処理についてこの場で書いてみます。 主に C++ で、簡単なパーティクルエンジンを作り、それを SIMD を用いて高速化する手順を解説します。 話を簡単にするため、以下の前提を設けます。 ・x86 環境のみ考慮 ・パーティクルは位置と速度のみを保持 ・パーティクル同士の相互衝突は総当たりで計算 総当たりなので超遅いですが、実装は容易で SIMD による恩恵を受けやすく、題材として手頃です。 この記事の中で引用されているソースの元は こちら、ビルド結果 (上のスクリーンショットのデモプログラム) は こちら になります。 相互衝突するパーティクルを実装する場合、お互いの距離を計算し、当たっていたらめり込み具合に応じて押し返す、というのがよくある実装だと思います。まずはそれをストレートに

    introdunction to SIMD programming - primitive: blog
  • Javaのマイクロベンチマークツール「JMH」 - Taste of Tech Topics

    ブログの読者の皆様方におかれましては、JavaのArrayListとLinkedListの 実装の違いにより性能に差があることは、当然のように熟知のことと存じあげます。 しかし! 実際にいかほどの差があるのか、それを数値で説明できるという方はどれほどいらっしゃるでしょうか。 いきなり丁寧語の煽りでスタートしました @cero_t です。 そう、今日のテーマはマイクロベンチマークです。 たとえば、 文字列を + で結合すると遅い。 ArrayListの初期化時にはサイズを指定したほうが良い。 ArrayListはループ処理が得意、LinkedListは途中の追加が得意。 など、よくあるパフォーマンスのプラクティスについては既に知っているという方も多いと思うのですが 実際に何倍ぐらいの差なのか(どれぐらいのオーダーの差なのか)を数値で話すことができるという方は、 あまり多くないように思います

    Javaのマイクロベンチマークツール「JMH」 - Taste of Tech Topics
  • Cacoo - Web上で図の作成とリアルタイムコラボレーション

    Online diagramming tool for collaborating on wireframes, flowcharts, and more

    Cacoo - Web上で図の作成とリアルタイムコラボレーション
  • Twitterがページ表示時間を5分の1に高速化。どのようなテクニックを使ったのか?

    Twitterフロントエンドのアーキテクチャを見直し、Webページの読み込み速度を改善したことをブログで明らかにしています。 新しいアーキテクチャでは、これまでWebブラウザ上でJavaScriptの処理によって行ってきたWebページのレンダリングを見直し、サーバ側でレンダリング済みのHTMLページを送信し表示することにしています。これによってWebページの読み込みから最初のツイートの表示までの時間が大幅に短縮されることになりました。 When we shipped #NewTwitter in September 2010, we built it around a web application architecture that pushed all of the UI rendering and logic to JavaScript running on our users’

    Twitterがページ表示時間を5分の1に高速化。どのようなテクニックを使ったのか?
  • 信じられないDB文化「固定長DB」でもあうんです。大規模コンシューマ向けサービスのRDB設計 - レベルエンター山本大のブログ

    ずいぶん時間があいてしまったけど、大規模コンシューマ向けサービスRDB設計の続き。 僕はこのプロジェクトを自分のRDBの知識を使って革新してやろうと思って臨んだ。 しかし結果として逆に、コンシューマ向けサービスに最適化されたRDBの使い方について教わることになった。 ※ あと、KVSでいいじゃんって言ってる人もいるけど、それはKVS導入の苦労を知らない人だと思う。KVSの苦労は後で書く。 僕らが最近手がけているのは、とても大規模なコンシューマ向けサービスだ。 100万人の契約ユーザが使い、1テーブルに1億レコード以上のデータを貯め、24時間止めることが許されず、 要求から応答までのターンアラウンドタイムが1秒以内という厳しいSLAのサービスである。 中でも僕はDBやフレームワークの設計とアーキテクトっぽいことを担当している。 僕がこの現場に来て、驚愕した文化が2つある それは「Join禁止

    信じられないDB文化「固定長DB」でもあうんです。大規模コンシューマ向けサービスのRDB設計 - レベルエンター山本大のブログ
    Nagise
    Nagise 2011/08/09
    パフォーマンス上の確たる理念のある「ポリシー」はよいね。SI業界では設計上の理由ではなく、人災的理由によるポリシーが跋扈しているからね
  • JDKの時間計測まわりのコードを読んでみる - 虎塚

    ぐぬぬ。。。せっかくのご指名ですが。。。 JVMがOSごとにどの計時関数を呼び出すのかすら、自分はろくに知らないのです…無念だ。 でも、「ネタを振られたら全力で撃ち返せ」ってじっちゃが言ってた。 というわけで、最適化よりもずっと手前の話題、JVMの時間取得まわりのコードを眺めてみようと思います。 Systemクラスのソースコードを見ると public static native long currentTimeMillis(); と、native宣言されている。ここから先はネイティブの世界。VMの実装依存の世界でもある。 Javaパフォーマンス計測 そんなタイマーで大丈夫か? - プログラマーの脳みそ そですね。では、その世界を確認してみましょう。 ゴール Javaで時間計測を行った時に各OSで最終的に呼ばれるAPIとその精度について、JDKのソースコードおよびドキュメントを元に把握する。

    JDKの時間計測まわりのコードを読んでみる - 虎塚
    Nagise
    Nagise 2011/02/28
    素晴らしいまとめ。OSよりのところは詳しくないので非常に参考になります!
  • HotSpot JVMの最適化オプションについて調べる - terazzoの日記

    Javaの最適化の議論で「インライン展開」「エスケープアナリシス」などの用語が出てきていて、気になって調べたところ、java実行時のオプションで最適化の方法を指定したり実行過程を表示したり出来るらしい。 主なオプションについて Java HotSpot VM Optionsにパフォーマンスに影響しそうなHotSpot VMのオプションが説明されている。 例: オプション 効果 -XX:+PrintCompilation メソッドがコンパイルされた際にメッセージを表示 -XX:+UseBiasedLocking Biased Lockingを使用する -XX:+OptimizeStringConcat 可能なら文字列の連結操作の最適化を行う -XX:+AggressiveOpts 将来のリリースでデフォルトになりそうな最適化フラグを有効にする ... ... たとえばjava起動時に-XX:

    HotSpot JVMの最適化オプションについて調べる - terazzoの日記
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • 「メモリーを意識してみよう」第4回 進化するメモリー管理:ITpro

    先々週にHotSpot VMでのメモリー管理について解説しました。ここでキーとなるのは世代別GCです。 HotSpot VMで世代別GCが採用される以前は,Old領域のGCで使用されるMark & Sweep GCだけでした。世代別GCが導入されたことにより,GCのパフォーマンスは劇的に向上したのです。 しかし,GCの進化はここで終わってしまったのではありません。Java SE 6(開発コード名Mustang)にいたるまで,様々な改良が加えられてきました。 今週はそれらの新しいGCの手法について解説していきます。その前に,まずは基となるMark & Sweep GCを説明しましょう。 Mark & Sweep GC Mark & Sweep GCは二つのフェーズでGCを行います。 はじめのフェーズで,使用しているインスタンスに印をつけます(Mark,図1a)。Markにはルートインスタン

    「メモリーを意識してみよう」第4回 進化するメモリー管理:ITpro
    Nagise
    Nagise 2011/02/23
    エスケープ解析
  • Java でサムネイル作成 その 3

    <その 1> <その 2> Java でサムネイルを作る方法についての最終回です。 前回、単純にバイキュービックなどの補間法でイメージを縮小しても、クオリティが低いということを書きました。 ところで、下のイメージを見比べてみてください。 右のイメージに比べ、あきらかに左の方がジャギが少ないと思いませんか。 この 2 つのイメージは両方ともバイリニアで縮小しています。違いは縮小率。 左が 50%、右が 48% です。 50% の場合、縮小した時に対応するピクセルは単純に求めることができます。4 ピクセルを 1 ピクセルにすればいいだけですから。 このため、品質が高いまま縮小が可能になるのです。これは最近傍だとだめなのですが、バイキュービックでも大丈夫です。ただ、パフォーマンス的にはバイリニアの方が速いので。 さて、ここで、発想を変えてみます。 つまり、縮小を 1 回で済ませなくてもいいのでは

  • HDDをSSDにしたらデータベースはどれだけ速くなるか? オラクルと富士通が実験

    リレーショナルデータベースを利用する際には、高い性能を引き出すために物理設計をし、スキーマを工夫し、パラメータのチューニングを行うことがつねに行われてきました。 性能のボトルネックはたいがいHDDにあり、いかにそのボトルネックを回避するかがチューニングのポイントですが、最近では性能向上のための武器として、HDDよりもずっとアクセス性能の高いSSDが注目されています。SSDはHDDと置き換えるだけで、アプリケーションにまったく手を加えずに性能向上を可能にする手段として非常に魅力的です。 HDDの代わりにSSDを利用したら、リレーショナルデータベースの性能はどれだけ向上するのでしょうか? オラクルと富士通が共同検証を行い、その結果をホワイトペーパーとして先週発表しました(参考「日オラクルと富士通 フラッシュ技術活用によるデータベース高速化を共同検証」)。 ホワイトペーパーでは、HDDの代わり

    HDDをSSDにしたらデータベースはどれだけ速くなるか? オラクルと富士通が実験
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • JavaのSwitch構文を高速化する方法。 - kensir0uのしくみ

    Switchを使うと以下の二つの命令のどちらかがコンパイラによって生成される。 lookupswitch - switch文のcase式の値が不連続である場合値を探しながらジャンプ先を探す。 tableswitch - switch文のcase式の値が連続である場合キー値をindexとしジャンプ先アドレスを値とする配列を作り高速にジャンプする。 つまり、特に問題がないかぎり、値を連続で定義するほうが、高速化できそうだ。 全然関係ないけども、下記の書き方はコンパイル可能。 int l = 1 ; l |=l ;

    JavaのSwitch構文を高速化する方法。 - kensir0uのしくみ
  • jstat - Java 仮想マシン統計データ監視ツール

    概要 説明 仮想マシン識別子 オプション   - 一般的なオプション   - 出力オプション 例 関連項目 形式 jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ] generalOption 単独で使用する一般的なコマンド行オプションです (-help、-options、または -version)。 outputOptions 単一の statOption と、-t、-h、および -J オプションのいずれかを組み合わせた、1 つまたは複数の出力オプションです。 vmidターゲットの Java 仮想マシン (JVM) を示す文字列である仮想マシン識別子です。一般的な構文は次のようになります。 [protocol:][//]lvmid[@hostname[:port]/servername] vmid 文

  • InfoQ: 8.8.8.8、より速いブラウジングのための DNS アドレス

    垂直スケーラビリティと効果的なテストによる金融取引システムのパフォーマンスと効率の最大化 Peter Lawrey氏はJavaチャンピオンであり、Chronicle SoftwareのCEOとして、開発者を鼓舞してソリューションのクラフトマンシップを高めることに情熱を注いでいる。経験豊富なソフトウェアエンジニアとして、Lawrey氏はソフトウェア開発プロセスにおけるシンプルさ、パフォーマンス、創造性、革新性を奨励することに努めている。

    InfoQ: 8.8.8.8、より速いブラウジングのための DNS アドレス
  • 続CPUエミュレーションを速くしたい - 静的バイナリ変換のハイブリッドシステム - Aoisomeの以下略

    前回の続きです。 どうやって、デコンパイルで生成したJavaコード実行と、エミュレーション実行を、都合よく切り替えるか、という お話です。 以下が簡単化した擬似コードです。 public void Execute() { while (clk > 0) { int beforeClk = clk; デコンパイルしたコード列 if (beforeClk == clk) { エミュレーション実行(); } } } Executeメソッドが、6502コアとなるメソッドです。 「デコンパイルしたコード列」という部分に、6502コードからJavaへ変換したソースコードが 埋め込まれているという前提です。 clkが6502コアを駆動する残りクロック数を表す変数です。 clkが0より大きい間、6502コアを駆動します。 ポイントとなるのが、デコンパイルしたコード列を実行する前に、clkの値を別の変数へ保

    続CPUエミュレーションを速くしたい - 静的バイナリ変換のハイブリッドシステム - Aoisomeの以下略
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • 1