Java「クラス」API のパフォーマンスについて質問があります。/car
またはのようなデータベース値を持つ必要があります/cars[0]/make
。これらのデータベース値のそれぞれについて、私が扱っている特定のクラスに/car
like setCar
(またはメソッド) のセッター メソッドがあるかどうかを確認する必要が/cars[0]/make
ありsetCars
ます。現在、クラスの宣言されたすべてのメソッドを ( を使用してgetMethods
) 繰り返し処理し、文字列チェックを行って、メソッド名がデータベースの値と一致することを確認しています。これを行うとき、私はどのメソッドも呼び出しません。これはMethod
API を使用していますが、実際にはメソッド呼び出しを行っていません。これは、Java リフレクションに関してはまだ重い操作ですか? これを言い換えると、このJavaリフレクションは使用されていますか?
質問する
451 次
2 に答える
0
はい、getMethods の呼び出しによるリフレクションを使用しています。パフォーマンスが気になる場合は、JIPなどの Java プロファイラーを使用してコードをプロファイリングできます。
于 2012-11-13T19:37:57.847 に答える
0
はい、宣言されたメソッドを検索するために Java リフレクションが使用されます。検索は、後でメソッドを呼び出すことなく、すでに高価な操作になっています。
ただし、OpenJDK (Java のデフォルトの実装) は内部キャッシュを使用するため、同じクラスで宣言されたメソッドの後続のルックアップははるかに高速です。
オブジェクト マッピング (データベースまたは JSON への) の主要なフレームワークはすべてリフレクションを使用するため、アプリケーションがサブミリ秒の反応時間で高頻度の取引を処理しない限り、ここでリフレクションを使用しても問題ありません。
于 2021-10-20T08:30:08.143 に答える