[解決済み] Java Reflectionのパフォーマンス
2022-04-14 16:42:54
質問
クラスのコンストラクタを呼び出すのではなく、リフレクションを使ってオブジェクトを作成すると、何か重大なパフォーマンスの違いが生じますか?
どのように解決するのですか?
はい - 絶対です。 リフレクションでクラスを調べることは 大きさによって より高価になります。
引用元 リフレクションに関するJavaのドキュメント :
<ブロッククオートリフレクションは動的に解決される型を含むので、ある種のJava仮想マシンの最適化は実行できません。その結果、リフレクションの操作は、リフレクションでないものよりも遅いパフォーマンスを持ち、パフォーマンスに敏感なアプリケーションで頻繁に呼び出されるコードのセクションで避けるべきです。
Sun JRE 6u10を搭載した私のマシンで、5分でできる簡単なテストを紹介します。
public class Main {
public static void main(String[] args) throws Exception
{
doRegular();
doReflection();
}
public static void doRegular() throws Exception
{
long start = System.currentTimeMillis();
for (int i=0; i<1000000; i++)
{
A a = new A();
a.doSomeThing();
}
System.out.println(System.currentTimeMillis() - start);
}
public static void doReflection() throws Exception
{
long start = System.currentTimeMillis();
for (int i=0; i<1000000; i++)
{
A a = (A) Class.forName("misc.A").newInstance();
a.doSomeThing();
}
System.out.println(System.currentTimeMillis() - start);
}
}
このような結果で
35 // no reflection
465 // using reflection
ルックアップとインスタンス化は一緒に行われることに留意してください。場合によってはルックアップをリファクタリングすることもできますが、これは単なる基本的な例です。
インスタンス化するだけでも、パフォーマンスヒットは発生します。
30 // no reflection
47 // reflection using one lookup, only instantiating
繰り返しになりますが、YMMVです。
関連
-
JQuery DataTable 详解
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
javaでよく使われる英単語
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
IllegalArgumentException この例外を解決する方法
-
javaの模造品QQ WeChatのチャットルーム
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
[解決済み] android:onClick XML属性とsetOnClickListenerは具体的にどのように違うのですか?
-
[解決済み] スタックトレースやリフレクションを使ってメソッドの呼び出し元を見つけるにはどうしたらいいですか?