Javaインスタンス生成性能

| | コメント(0) | トラックバック(0)

概要

大量にオブジェクトを生成しなければならないケースにおいて、オブジェクト生成方法による性能差について調査した。
特に、Java のリフレクションは遅いと聞くが、どのくらい性能がでるのかが気になっていた。

調査に使った Java のバージョン: Sun JDK 1.6.0_05

結論

  • new Foo() の形で生成する方法は、リフレクションを使った他の方法より圧倒的に高速に動作する。
  • リフレクションを使うケースの中では、static な newInstance() をリフレクションで呼ぶ方法が最も高速に動作した。

調査内容

次の3つの生成方法で実行時間を計測した。
  • test-1 - new Foo()
  • test-2 - Class.newInstance()
  • test-3 - Constructor.newInstance()
  • test-4 - Foo の static メソッド newInstance() をリフレクション経由で実行
また test-2 以外のテストケースでは、コンストラクタの引数が無しのケースと int を引数とするケースを調査した。

test-1: new Foo() で生成 (引数なし)
test-1-2: new Foo(int)
test-2: Class.newInstance() で生成
test-3: Constructor.newInstance() で生成
test-3-2: Constructor.newInstance(int) で生成
test-4: Foo.newInstance() をリフレクションで実行
test-4-2: Foo.newInstance(int)

実行結果

テストケース 引数なし [msec] 引数あり [msec]
test-1 125 172
test-2 3344
test-3 3281 3891
test-4 1984 2625

トラックバック(0)

このブログ記事を参照しているブログ一覧: Javaインスタンス生成性能

このブログ記事に対するトラックバックURL: http://trasis.jp/cgi-bin/mt/mt-tb.cgi/67

コメントする

2012年4月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30