2

Java アプレットの起動時間をプロファイリングしています。jar からのリソースが要求されるたびに、サイズが 5MB の巨大な jar が完全に読み取られることに気付きました。たとえば、画像ログ構成ファイル、I18N ファイルなど....そのように動作する必要がありますか? 正しいポイントにジャンプすることは可能ですか?ファイルを一度だけ読み取ることはできますか? cache_archiv_ex に切り替えて preload ディレクティブを追加すると、役に立ちますか? jar ファイルが開かれる場所の例:

java.io.FileInputStream.open(String)
java.io.FileInputStream.<init>(File)
com.sun.deploy.cache.DeployCacheHandler$2.run()
java.security.AccessController.doPrivileged(PrivilegedExceptionAction)
com.sun.deploy.cache.DeployCacheHandler.get(URI, String, Map)
sun.net.www.protocol.http.HttpURLConnection.plainConnect()
sun.net.www.protocol.http.HttpURLConnection.connect()
sun.net.www.protocol.http.HttpURLConnection.getInputStream()
sun.plugin.PluginURLJarFileCallBack.downloadJAR(URLConnection, boolean)
sun.plugin.PluginURLJarFileCallBack.access$000(PluginURLJarFileCallBack, URLConnection, boolean)
sun.plugin.PluginURLJarFileCallBack$2.run()
java.security.AccessController.doPrivileged(PrivilegedExceptionAction)
sun.plugin.PluginURLJarFileCallBack.retrieve(URL)
sun.net.www.protocol.jar.URLJarFile.retrieve(URL, URLJarFile$URLJarFileCloseController)
sun.net.www.protocol.jar.URLJarFile.getJarFile(URL, URLJarFile$URLJarFileCloseController)
sun.net.www.protocol.jar.JarFileFactory.get(URL, boolean)
sun.net.www.protocol.jar.JarURLConnection.connect()
sun.plugin.net.protocol.jar.CachedJarURLConnection.connect()
sun.plugin.net.protocol.jar.CachedJarURLConnection.getInputStream()
java.net.URL.openStream()
java.lang.ClassLoader.getResourceAsStream(String)
sun.plugin2.applet.Applet2ClassLoader.getResourceAsStream(String)
..
.. (real application code stack...)
..
..
java.awt.event.InvocationEvent.dispatch()
java.awt.EventQueue.dispatchEvent(AWTEvent)
java.awt.EventDispatchThread.pumpOneEventForFilters(int)
java.awt.EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter)
java.awt.EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component)
java.awt.EventDispatchThread.pumpEvents(int, Conditional)
java.awt.EventDispatchThread.pumpEvents(Conditional)
java.awt.EventDispatchThread.run()
4

4 に答える 4

2

jarファイルへのインデックスを作成することもできます

jar -i "jar file"

そして、その量のデータが常に転送されているかどうかを確認します。

于 2009-12-28T15:15:02.087 に答える
2

getResourceAsStream は CachedJarURLConnection を呼び出しています。jarをキャッシュしておらず、一度だけダウンロードしていると確信していますか? もしそうなら、私はあなたのWebサーバーがjarの最終更新日を毎回異なる、または間違っていると報告していないことを確認します。

于 2009-12-28T15:08:55.997 に答える
0

アプレットは必要ですか?ページ内に Java アプリケーションを埋め込む必要がない限り、Webstartを使用することをお勧めします。

于 2009-12-28T20:43:02.610 に答える