利用-noverifyを起動するときにjavaアプリケーション
-
08-07-2019 - |
質問
いるアプリケーションもたくさ器の授業や -javaagent
としてparamの場合荷重にも力を入れており -noverify
にョンをインストールして下さい。
Java docという -noverify
オクラスを検証した。
しかししているのは、電源off検証であってもinstrumentingます。
解決
起動時間です。クラスがロードされているとき、クラスが正しいことの検証には時間がかかります。クラスは怠appな方法でロードされる可能性があるため(アプリの起動時ではなく、初めて使用するとき)、これにより予期しない望ましくないランタイム遅延が発生する可能性があります。
実際には、クラスを一般的にチェックする必要はありません。コンパイラは、無効なバイトコードまたはクラス構成を出力しません。検証の理由は、クラスが1つのシステムで構築され、オンラインでホストされ、保護されていないインターネット経由でユーザーに送信される可能性があるためです。このパスでは、悪意のある攻撃者がバイトコードを変更し、コンパイラが決して作成しないものを作成する可能性があります。 JVMをクラッシュさせたり、セキュリティ制限を回避したりする可能性のあるもの。したがって、クラスは使用前に検証されます。これがローカルアプリケーションの場合、通常、バイトコードを再度確認する必要はありません。
他のヒント
使用される場合せ -javaagent
, である ない パフォーマンス上の理由から、その意図的に作"無効"bytecode.
この無効bytecodeがまだ実行、一部の検証ルールはかなり厳しく設定されています。例えば、 this
必要とさせていただきますので、コンストラクタの前にスーパー-コンストラクタと呼ばれたので、これらの変数は初期化されません。があるものがないのJRebelします。そして、使用 -noverify
を回避することです。
デバッグ中!実際、それが私が今やっていることであり、この質問に私がつまずいた方法です。 Terracottaでは、多くのバイトコードインストルメンテーションを実行します。クラスアダプターをデバッグするときにベリファイアをオフにすると、実行時に正確に失敗する場所を確認できる場合があります。
その通りです。検証者が本番環境で動作し続けるようにします。
-noverify
なしでJRebelを使用すると、起動時に次の警告が表示されます。
JRebel: '-noverify'がない、コンストラクターの変更/追加/削除は有効になりません!
-noverify
は、バイトコードの再インスツルメンテーションにより、他の方法では不可能なことを実行できるように見えます。
以前は起動時間が少し問題でした。ただし、検証者はプロセッサと同様に高速です。 JDK6 javacでコンパイルされたコードには、検証者のステップをより速くするための追加情報がデフォルトで含まれます。 Apache Harmonyは、はるかに高速な検証アルゴリズムを使用しています。
いくつかの非常に古いバージョンのjavacは、不正なバイトコードを生成しました。実際、Sun PlugInには、破損したクラスファイルを検証するための修正コードがまだ含まれています。
JAVA 6で導入された新しい検証ツールは、コード操作の処理が非常に複雑です。
これを見てください: http:// chrononsystems .com / blog / java-7-design-flaw-leads-to-huge-backward-step-for-the-jvm
および関連するバグレポート: http://bugs.sun.com/view_bug.do?bug_id=8009595