jhatを使用してヒープダンプを解析しているときに、DelegatingClassLoaderのインスタンスがコード内で明示的に呼び出されていないものの、多くのインスタンスが作成されています。私はこれをある種の反射最適化メカニズムと考えています。誰か詳細を知っていますか?Sun JVMは実行時にsun.reflect.DelegatingClassLoaderのインスタンスを作成しますか?
答えて
はい、おそらく反射の最適化です。
Sun JVMでは、プロパティとメソッドへの反映アクセスは、JNIを介してJVM実装に呼び出すことによって最初に実行されます。 JVMはメソッドやフィールドがリフレクションによって多くアクセスされていることに気づいた場合、同じことを行うためのバイトコード、つまり "インフレーション"というメカニズムを生成します。これには最初のスピードがありますが、その後は約20倍速くなります。あなたが多くの反省をするなら、大きな勝利。
バイトコードは、DelegatingClassLoaderインスタンスによって作成されたクラスに存在します。それに気をつけてください:これらのクラスは、Permgen空間に圧力をかけ、恐ろしい "java.lang.OutOfMemoryError:PermGen space"の失敗を引き起こします。問題がある場合は、システムプロパティーsun.reflect.inflationThresholdを0(ゼロ)に設定して、インフレーションをオフにすることができます。
ゼロの設定は機能をオフにすることをコード
http://javasourcecode.org/html/open-source/jdk/jdk-6u23/sun/reflect/ReflectionFactory.java.html
と
を見たとき、私は、(少なくとも、ホットスポットのために)表示されません。私にはsun.reflect.inflationThresholdの大きな値だけが仕事をしてくれると思う。
IBMは動作が異なり、0または1でオフになります(0または1では何も変わらないが、両方ともDelegatingClassLoaderがロードされていないとわかりません)。 – eckes
- 1. 実行時にクラスのインスタンスを作成する
- 2. iPhoneは実行時にSQLiteデータベースを作成しますか?
- 3. JRockitミッションコントロール4.1はSUNホットスポット(ホットスポット)JVMをサポートしていますか?
- 4. 実行時にアセンブリをロードし、Activator.CreateInstance()を使用してインスタンスを作成する
- 5. AndroidでJavaバイトコードを実行する - DalvikVMの上にあるSun JVM
- 6. PHPクラスインスタンスの作成時にコードを実行しますか?
- 7. Javaメモリの説明(SUN JVM)
- 8. onclickを追加したり、実行時にデータベースから実行時に作成
- 9. 私は、実行時にクラスの複数のインスタンスを作成しても、初期化したいために、次のコードを試みていますが、それはエラーを与えている、実行時にクラスのインスタンスを作成し、同時に
- 10. 実行時にJavaのjvmプロパティを設定するには
- 11. Java:実行時に型の新しい実装を作成しますか?
- 12. Sun JVM(JRE jre1.6.0_24)segfault NET_Read
- 13. Java_java_net_NetworkInterface_getAll中にsun JVMがクラッシュする
- 14. 実行時に知られているクラスのインスタンスを作成する
- 15. 実行時にクラスを作成する
- 16. 実行時にレイアウトを作成する
- 17. 実行時にユーザコントロールオブジェクトを作成する
- 18. 実行時にusercontrolを作成する
- 19. 実行時にNinePatchを作成する
- 20. 実行時決定型のインスタンスを作成する最良の方法
- 21. 実行時に動的クラスを作成
- 22. Pythonのループでクラスのインスタンスを作成していますか?
- 23. Python - コンパイル時と同じように、コードを実行時に実行するEXEを作成します。
- 24. iOS SDKを使用して実行時にplistを作成しますか?
- 25. なぜ私はSQLiteのVIEWでトリガーを作成しますか?実行時
- 26. クラスメタタイプのインスタンスを即時に作成
- 27. 実行時に "C"文を作成して実行することはできますか?
- 28. NSUserDefaultsは実行時に常にIOを実行しますか?
- 29. アプリケーションのデプロイ時に実行されるJavaでサービスを作成しますか?
- 30. 実行時に作成されたワイヤアップボタン
警告:このプロパティはOracle/OpenJDKとIBM JDKで動作しますが、IBMではインフレーションをオンにします。すぐにそれが膨らんでいます(これは、-verbose:classを使用して試行しました。DelegatedClassLoaders Beeingをインスタンス化したものです。利用できません)。どちらのデフォルト値も15ですが、インフレーションを減らすためにそれを1000などに設定することを考えていましたが、スピードアップの恩恵を受けています。 – eckes