参考:
記事のディレクトリ
JVMTIのシナリオ
-
class
ファイルの暗号化- いくつかの従来の手段を用いて
容易に逆コンパイルすることができるクラスファイルを暗号化するために(例えば、錯乱またはカスタムクラスローダを使用して)。逆コンパイルコードより困難が読みますが、だけでなく、読むためにいくつかの努力を取ることができます。 - 使用JVMTIの
コードは、私たちが解読できるにカプセル化される.dll
か、.so
ファイル。
あなたはそれを逆コンパイルするファイルは、トラブルに他の缶パッカーです。
- いくつかの従来の手段を用いて
-
パフォーマンス監視(アプリケーション・パフォーマンス管理、APM)、診断(プロファイル)
- 分散アーキテクチャとマイクロベースのサービスの監視と運用・保守にもたらした課題に対処するためのAPMのJVMTI。
オープンソースピンポイント、ZipKin、Hawkular、商用AppDynamics、OneAPM、GoogleのDapperの選手は1ですべてです。 - CPU使用率へのエイブルが高すぎる、など診断など、スレッドのデッドロックの問題
など、オープンソースのJavaアリババ診断ツールとしてArthasは
それが動的に表示したり、チェーン上のメソッド呼び出しの前に、切片に時間のかかる方法の後に変数統計の値を変更することができ、印刷パラメータと戻り値、および例外情報、
- 分散アーキテクチャとマイクロベースのサービスの監視と運用・保守にもたらした課題に対処するためのAPMのJVMTI。
-
JAVAプログラムのデバッグ(デバッグ)[開発者、最も実用的!]
これは、デバッグするための開発ツールの原理であります
JVMTIデバッガorg.eclipse.jdt.debug基礎となるEclipseプラグインを達成するために呼び出されたよう。
分散、サービス提供のためのマイクロ同時に、リモートデバッグ可能!
グーグルでも、ツールクラウドデバッガをデバッグするクラウドを立ち上げました。
これは、Webアプリケーションを作る、それが生産環境を指示することができますリモートデバッグ再起動やサービスを中断することなく。
アリは、同様のツールZdebuggerを持っています。 -
熱負荷
熱い展開の原理
JVMTI - JVMツールインターフェイス
Java仮想マシン ツール・インタフェース(JVMTI、JVMツールインタフェース)
比喩的に言って
JVMTIが提供するJava仮想マシンのセットですバックドア。
仮想マシンのすべての側面は、バックドアを通って設定することができます監視、分析。
さえ介入実行する仮想マシン。
以前として知られています
- 仮想マシンのデバッグインタフェース(Java仮想マシン
Debug
・インターフェース、JVMDI) - 仮想マシンのパフォーマンス・デバッグ・インタフェース(Java仮想マシン
Profiler
・インターフェース、JVMPI)
(2005年)J2SE 5.0後JDKはJVMDIインターフェースの二組とJVMPIを置き換え
JVMDIは、もはや最新のJava SE 6ではサポートされていない、とも完全にJava SEの後JVMPI 7を交換する計画。
JPDA - Javaプラットフォームデバッガアーキテクチャ
理解するために進む前に、まず理解する必要があります Javaプラットフォームデバッガシステム(Javaプラットフォームデバッガアーキテクチャ、JPDA)。
JPDAは、達成するために3層に抽象化されます
- どの
JVMTI
JVMです对外暴露的接口
。 JDI
これは、JDWPを達成することです通信协议的客户端
调试器
これは、通信JDIデバッガとJVMを介して行われます。
自然のJVMTI
JVMTIは、基本的にポイントがJVM内部の多くのイベントに埋葬されたあります。現在のコンテキストは、埋め込みポイントを介して外部に情報を提供することができます。でも、あなたは次のアクションを変更するには、外部コマンドを受け入れることができます。
- 外部プログラムは、一般的に実装するC / C ++を使用して
JVMTIAgent
、エージェントの一部の内側に登録しますJVM事件的回调
。 - イベントが発生するとJVMTIは、それらを呼び出します
回调方法
。 - エージェントのコールバックメソッドは、内部に実装することができます
自己的逻辑
。
その中でも、JVMTIAgentがされ动态链接库
た仮想マシンの形でロードされています。
JVMTIの状態
全体JPDAシステムの底部にJVMTI、JVMTIに自然の必要性によって提供されるすべてのデバッグ機能。
-
広い意味では、
JVMTIインタフェースをデバッグするために使用され、プロファイラすることができる提供し、
同時に、Java(登録商標)5/6で、仮想マシンインターフェースは、モニター(監視)、スレッド分析(スレッド分析)およびカバレッジ分析(カバレッジ分析を増加させます)およびその他の機能。 -
小宇宙では
、仮想マシンのスレッド、メモリ、スタック、スタック、クラス、メソッド、変数、イベント、タイマ処理、および他の多くの機能が含まれています。
具体的な参考資料オラクル:
「JVMTMツール・インタフェース」https://docs.oracle.com/javase/1.5.0/docs/guide/jvmti/jvmti.html。
これらのインタフェースを通じて、開発者はJavaプログラムを実行するだけでなく、仮想マシン上でデバッグするだけでなく、その動作の状況、設定したコールバック関数、最適化アプリケーションのパフォーマンスに特定の環境変数のコントロールを表示することができます。
JVMTIの実装
JVMTIは、必ずしもすべての異なる仮想マシンが同じではありません達成するために、Java仮想マシン上で実装されていません。しかし、そのような日やIBMだけでなく、オープンソースのApacheハーモニーDRLVMの一部として、いくつかの主流の仮想マシンで、標準ではJVMTIの実装を提供します。