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. JRockitミッションコントロール4.1はSUNホットスポット(ホットスポット)JVMをサポートしていますか?
- 3. AndroidでJavaバイトコードを実行する - DalvikVMの上にあるSun JVM
- 4. Javaメモリの説明(SUN JVM)
- 5. iPhoneは実行時にSQLiteデータベースを作成しますか?
- 6. 実行中のJVMとは異なるスレッドを作成する
- 7. 実行時にアセンブリをロードし、Activator.CreateInstance()を使用してインスタンスを作成する
- 8. Sun JVM(JRE jre1.6.0_24)segfault NET_Read
- 9. PHPクラスインスタンスの作成時にコードを実行しますか?
- 10. Java_java_net_NetworkInterface_getAll中にsun JVMがクラッシュする
- 11. カスタムJVM言語:実行可能なスタックトレースを作成しますか?
- 12. 実行時にJavaのjvmプロパティを設定するには
- 13. 私は、実行時にクラスの複数のインスタンスを作成しても、初期化したいために、次のコードを試みていますが、それはエラーを与えている、実行時にクラスのインスタンスを作成し、同時に
- 14. onclickを追加したり、実行時にデータベースから実行時に作成
- 15. Java:実行時に型の新しい実装を作成しますか?
- 16. ノード/ JSはインポート時に新しいインスタンスを作成します
- 17. JavaカレンダーはMon-SunまたはSun-Satから移行しますか?
- 18. ImageListを作成して実行時に作成する
- 19. 実行時に知られているクラスのインスタンスを作成する
- 20. 実行時にusercontrolを作成する
- 21. 実行時にユーザコントロールオブジェクトを作成する
- 22. 実行時にテーブルを作成する
- 23. 実行時にクラスを作成する
- 24. 実行時にNinePatchを作成する
- 25. 実行時にレイアウトを作成する
- 26. 実行時にスポックテストを作成する
- 27. phpmyadminのインスタンスを2つ同時に実行できますか?
- 28. 実行時にオブジェクトを作成して移動するには?
- 29. インデックス作成時にソーシャルネットワークでJavaScriptを実行できますか?
- 30. ElasticBeanstalk Tomcatインスタンスの実行時に設定を更新します
警告:このプロパティはOracle/OpenJDKとIBM JDKで動作しますが、IBMではインフレーションをオンにします。すぐにそれが膨らんでいます(これは、-verbose:classを使用して試行しました。DelegatedClassLoaders Beeingをインスタンス化したものです。利用できません)。どちらのデフォルト値も15ですが、インフレーションを減らすためにそれを1000などに設定することを考えていましたが、スピードアップの恩恵を受けています。 – eckes