この記事では主に Java メソッドのリフレクションの実装原理を詳しく紹介します。興味のある方は参考にしてください
ブロガーは次のように述べています: Java リフレクション メカニズムはすべてを知ることができます。このクラスのプロパティとメソッド、任意のオブジェクトに対して、そのメソッドとプロパティのいずれかを呼び出すことができます。情報を動的に取得し、オブジェクトのメソッドを動的に呼び出すこの機能は、Java 言語のリフレクション メカニズムと呼ばれます。この記事では、Zhan Xiaolang が Java リフレクション メカニズムの実装原理 (ソース コード) を分析しています。興味のある学生は、この記事を数分間読んで理解することができます。
Text
public class ReflectCase { public static void main(String[] args) throws Exception { Proxy target = new Proxy(); Method method = Proxy.class.Javaリフレクション実装方法の原理を詳しく解説("run"); method.invoke(target); } static class Proxy { public void run() { System.out.println("run"); } } }Javaのリフレクションメカニズムを通じて、この方法で大量の呼び出しが行われると、オブジェクトの任意のメソッドを呼び出すことができます。パフォーマンスやメモリのリスクは何ですか?メソッドのリフレクション メカニズムを完全に理解するには、基礎となるコードから始めるしかありません。
Method Get
Class クラスの Javaリフレクション実装方法の原理を詳しく解説 を呼び出し、指定されたメソッド名とパラメータを持つメソッド オブジェクト Method を取得します。Javaリフレクション実装方法の原理を詳しく解説
Javaリフレクション実装方法の原理を詳しく解説
メソッドです。 Method.copy()
Javaリフレクション実装方法の原理を詳しく解説
クラスで宣言されたメソッドのリストをキャッシュまたはJavaリフレクション実装方法の原理を詳しく解説から取得します。実装は次のとおりです。Method 呼び出し
指定されたメソッド オブジェクト Method を取得した後、その invoke メソッドを呼び出すことができます。 invoke 実装は次のとおりです。
ここでの MethodAccessor オブジェクトが実装のキーであることに注意してください。最初は、メソッドAccessorは空です。新しいMethodAccessorオブジェクトを生成するには、メソッドAccessor自体が次のように実装されます。 MethodAccessor インターフェイスを実装します。実装は、ReflectionFactory クラスの newMethodAccessor を通じて作成されます。
ReflectionFactory クラスには、noInflation (デフォルト false) と inflationThreshold (デフォルト 15) という 2 つの重要なフィールドがあります。checkInitted メソッドでは、-Dsun.reflect.inflationThreshold=xxx および -Dsun.reflect.noInflation=true を渡すことができます。この 2 つのフィールドはリセットされ、一度だけ設定されます。noInflation が false の場合、newMethodAccessor メソッドは Javaリフレクション実装方法の原理を詳しく解説 のクラス実装を返します。実際、Javaリフレクション実装方法の原理を詳しく解説 オブジェクトはプロキシ オブジェクトです。プロキシ オブジェクトのデリゲートを呼び出すための invoke メソッド。デリゲート パラメーターは現在 NativeMethodAccessorImpl オブジェクトであるため、最後の Method の invoke メソッドは、次のように実装される NativeMethodAccessorImpl オブジェクトの invoke メソッドを呼び出します。ここではReflectionFactoryクラスを使用します。 デリゲートがinvokeメソッドを15回呼び出した場合 以降、呼び出しを続けると、MethodAccessorGeneratorクラスのgenerateMethodメソッドを通じてMethodAccessorImplオブジェクトが生成され、デリゲートオブジェクトとして設定されます。 Method.invoke が実行されると、新しく作成された MethodAccessor オブジェクトの invoke() メソッドが呼び出されます。ここで注意する必要があるのは、generateMethod メソッドが MethodAccessorImpl オブジェクトを生成するときに、対応するバイトコードをメモリ内に生成し、ClassDefiner.defineClass を呼び出して対応する Class オブジェクトを作成するということです。実装は次のとおりです。 ClassDefiner.defineClass メソッドでは、呼び出されるたびに DelegatingClassLoader クラス ローダー オブジェクトが生成されます。
パフォーマンスを考慮して毎回新しいクラス ローダーが生成されます。場合によっては、これらの生成されたクラスがアンロードされる可能性があります。クラスのアンロードは、クラス ローダーがリサイクルできる場合にのみリサイクルされます。元のクラス ローダーが使用されている場合、これらの新しく作成されたクラスがアンロードされなくなる可能性があります。設計上、これらのクラスが常にメモリ内に存在することは望ましくありません。そして必要なときにそこにいてください!
以上がJavaリフレクション実装方法の原理を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
