覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

JMH

Java 8 での java.nio.Files#existsは遅いのか?

Java 7で導入されたNew I/O API(NIO2)。その時に新規クラスとして、java.nio.Files などが増えました。 このクラスで、java.io.File のコードを置き換えることなどが可能です。 今はjava.io.Fileクラスではなく、NIO2の機能(java.nio.Filesクラス)を使うの…

普通にコンストラクタ呼び出すのとリフレクション使うのとでどれだけ速度差あるの?

Javaでインスタンス生成する場合は、コンストラクタを実行するのが普通ですが、リフレクションでもやれます。 ただ、一般的にリフレクション使うと遅いというのが懸念点の一つとして上がってきます。 というわけで、普通にコンストラクタ実行するとのリフレ…

JMHでJavaのマイクロベンチマークを取得する

JMHは、Java用のマイクロベンチマーク取得ツールです。 基本的な使い方 計測時の初期化処理や終了処理を行いたい場合 計測の実行条件の指定 JMHを用いた計測サンプル

JMH - 計測結果のレポートをファイルに出力

JMHを使用した計測を行った場合、通常は計測結果はコンソールに出力されますが、 オプションの指定で計測結果をファイルに出力することができます。 また、出力する形式(CSV, JSON, ...)を指定することも可能です。 ファイル名指定で計測結果のレポートを…

JMH - fork数の指定

JMHでは、fork数というものを指定することができます。 fork数は、Benchmarkの取得(ウォームアップ開始から計測終了までの)処理の実行回数に対応します。 fork数が1であれば、1回だけベンチマークの取得を行い、fork数が2であればベンチマークの取得を2回…

JMH - 複数スレッドで実行した場合のベンチマーク

JMHでは、デフォルトではベンチマークの対象の処理を1スレッドで実行して計測を行いますが、 オプションでスレッド数を指定することができます。そうすることで複数スレッドで実行した場合のベンチ―マークを取得することができます。 スレッド数はコード上…

JMH - 実行条件をアノテーションで記述する

本ブログ内で、JMHを使ってベンチマークの取得をいくつか実施してきましたが、実行条件は(mainメソッドの中で)OptionsBuilderのメソッドを実行して指定してきました。 JMHには、実行条件の指定をするためのアノテーションも用意されています。 それらアノテ…

JMH - 計測モード

JMHでの計測を本ブログ内でいくつか行いましたが、全てThroughput(Mode.Throughput)というモードで実施しました。 Throughputは、単位時間辺りに対象の処理を何回実行できるかを取得するものです。 JMHにはThroughput以外の計測モードも用意されています。 T…

JMH - 初期化処理・終了処理を行う

JMHを使ってベンチマークの取得を行っている際に、計測処理の外側で初期化処理や終了処理を行いたい場合があると思います。 そのために用意されているのが以下のアノテーションになります @Setup(org.openjdk.jmh.annotations.Setup) - 初期化処理用のアノテ…

Gson vs Genson vs Fastjson (2)

以下記事に続いて、Gson, Genson, Fastjson, JSONIC のベンチマークをJMHを用いて取得しました。 JSONの項目数が1, 2, 4, 8個の場合のそれぞれについて以下操作を実施して測定してみました Javaオブジェクト⇒JSON文字列の変換(Serialize) JSON文字列⇒Javaオ…

Gson vs Genson vs Fastjson

JavaのJSONライブラリ(GsonとGenson)のベンチマークをとってみたばかりですが、 その時は対象になかったFastjsonというライブラリも含めて比較してみました。 (なぜか、またJacksonを含めていないです笑) pom.xmlに追加した内容は以下の通り <dependency> <groupId>com.owlike</groupId> <artifactId>g</artifactid></dependency>…

いろんな現在日時取得のベンチマーク

Javaで現在日時(現在日)を取得するAPIがいくつかありますが、それらのベンチマークを取得してみました。 比較したAPI(クラス)は以下の通りです new java.util.Date java.util.Calendar#getInstance java.time.LocalDate#now java.time.LocalDateTime#now…

Gson vs Genson (1)

Java用のJSONライブラリはいくつかありますが、今回GsonとGensonの性能を比較してみました。 とりあえず単純なBeanからシリアライズ、Beanへのデシリアライズを実行しました。 基本GsonとGensonの比較なんですが、ついでにJSONICも比較してみました (なんで…

JMH - java.util.Date と java.util.Calendar を比較

測定するまでもない気がしますが、現在日時を意味する java.util.Date のインスタンスを生成するのに以下のいずれが早いのかを確認してみます。 new java.util.Date() java.util.Calendar.getInstance().getTime() JMHでの測定用のコードは以下です import j…

JMH - Javaでのベンチマークを試してみる

OpenJDK のサイトで公開されているマイクロベンチマーク用のライブラリ。Java Microbenchmark Harness の略。 JMHの存在理由 Javaでパフォーマンス測定(ベンチマーク取得)するのは以下のような理由により簡単ではありません 計測用のコードを書くのが実は…