タグ付けされた質問 「serviceloader」

2
FactoryFinderのパフォーマンス/悪いキャッシュ
多くのxml処理を実行する巨大なクラスパスを備えた、かなり大きなjava eeアプリケーションを持っています。現在、一部の機能を高速化し、サンプリングプロファイラーを介して遅いコードパスを見つけようとしています。 私が気づいたことの1つは、特に呼び出しのあるコードの一部TransformerFactory.newInstance(...)が必死に遅いことです。私はこれを常に新しいインスタンスを作成するFactoryFinderメソッドまで追跡しfindServiceProviderましたServiceLoader。でServiceLoader javadocの私は、キャッシングについては、以下の注記が見つかりました: プロバイダーは、遅延して、つまりオンデマンドで配置およびインスタンス化されます。サービスローダーは、これまでにロードされたプロバイダーのキャッシュを維持します。イテレータメソッドを呼び出すたびに、インスタンス化の順序で最初にキャッシュのすべての要素を生成するイテレータが返されます。次に、残りのプロバイダを遅延検索してインスタンス化し、それぞれを順番にキャッシュに追加します。キャッシュはreloadメソッドでクリアできます。 ここまでは順調ですね。これはOpenJDKs FactoryFinder#findServiceProviderメソッドの一部です: private static <T> T findServiceProvider(final Class<T> type) throws TransformerFactoryConfigurationError { try { return AccessController.doPrivileged(new PrivilegedAction<T>() { public T run() { final ServiceLoader<T> serviceLoader = ServiceLoader.load(type); final Iterator<T> iterator = serviceLoader.iterator(); if (iterator.hasNext()) { return iterator.next(); } else { return null; } } }); …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.