問題タブ [jvmti]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - とにかくJVMTIを介してjthreadtidを取得しますか?
GetAllThreadsと呼ばれるJVMTIの関数があります。ただし、取得できるのはjthreadオブジェクトのみです。jthreadオブジェクトのtidを取得する方法はありますか?tidとは、gettid()システムコールによって返されるカーネルスレッドIDを意味します。
heap-memory - Android アプリケーション用の DVM ツール インターフェイス (Java 相当の JVMTI) はありますか?
Eclipse デバッガーは、Android アプリケーションに対して引き続き機能します。これは、このデバッガーが実際にどのように実装されているのか疑問に思います。DVM と JVM 用に別々に実装されていますか、それともヒープとスタックの情報を取得できる共通のインターフェースはありますか? Android アプリケーションのヒープ スナップショットを取得するためのプログラム可能なインターフェイスを探しています。
java - Java in C 用の BCI ライブラリ
JVMTI エージェントで使用する C または C++ の Java 用の BCI (Bytecode Instrumentation) ライブラリを探しています。
最良のシナリオは、純粋な C でのASMやBCELのようなものです。
java_crw_demo
私がこれまでに見つけた最も近いものは、Kelly O'Hair によって数年前に書かれ、それ以来 Sun/Oracle のチュートリアルで使用されているデモのみです。
他に何か知っていますか?
java.lang.Object
いくつかの理論的根拠:のすべての直接サブクラスでゲッター メソッドを追加し、このゲッターをオーバーロードする計測ツールを構築していますObject
。このため、Java エージェントを使用できません。また、複雑さと速度の理由から、インストルメンテーションを実行するためにセカンダリ JVM を生成することは避けたいと思います。
crash - Linux での jvmti エージェントの致命的なエラー: C [libc.so.6+0x7ae68] strcpy+0x18
メソッド呼び出しをトレースする jvmti エージェントを作成しました。C と jvmti および jni 関数を使用してコーディングします。私たちのOSはFedora 15で、エージェントは.so
ファイルにコンパイルされています。重要な Java プログラムでテストすると、クラッシュして次のエラー メッセージが表示されます。
deadlock - jvmti エージェントのデッドロック
Java プログラムで jvmti エージェントを実行すると、jvm でデッドロックが発生したようです。私の jvmti エージェントでは、Agent_OnLoad() で 1 つの raw モニターを作成し、すべてのコールバック関数の最初でそのロックに入り、すべてのコールバック関数の終わりでそのロックを終了します。このデッドロックの理由はわかりません。jvmti エージェントでデッドロックが発生する可能性は他にありますか?
ありがとう。
java - jdk6-のjvmti-リファレンスとチュートリアル
jvmtiエージェントの作成を学ぶための良い出発点を知っている人はいますか。
このための本やオンラインチュートリアルを探しています。
http://docs.oracle.com/javase/6/docs/platform/jvmti/jvmti.htmlを見ました
しかし、それはハウツーの明確な概要を提供していないようです。
任意の参照をいただければ幸いです。
java - System.load とライブラリ セットをエージェントとして使用する
特定のオブジェクトのサイズを測定するための簡単なライブラリを作成しました。ライブラリには、Java クラスから JNI を介してアクセスします。ホットスポット用に特別に設計されているため、JVMTI を使用して を呼び出しますGetObjectSize
。
私の質問は、より良い解決策は何ですか?
System.load("library")
または を使用してライブラリをロードするにはライブラリをエージェントとして設定し、agent オプションを指定して java コマンドを発行して明示的にロードします。
これまでに見た同様の例はすべて、エージェント関数を使用しています。
ライブラリをロードするよりも効率的な方法は何ですか?
ありがとう!
java - Java の DebuggerStepThrough に相当するもの
.NET には、デバッガーに特定のメソッドをステップスルーまたはステップオーバーするように指示する便利な注釈がいくつかあります。Java プラットフォームで動作する同等のものがあるかどうかを知りたいです。
例えば:
ステップ実行時にデバッガが停止しないfoo
原因となります。
私が試したこと
- クラスファイルで SYNTHETIC フラグを使用します。これにより、javac はそのようなメソッドを呼び出すユーザー コードを禁止します。
- カスタム属性。注釈を取得するためのJDI APIはありません。このフォーラムでも言及されています。
PS。デバッガーを実装しており、出力されるバイトコードを制御しています
java - JVMTI プロファイリング: スタック メモリの量の計算
アプリケーションのメモリ使用量を監視する JVMTI エージェントに取り組んでいます。新しいオブジェクト/配列が割り当てられるたびにネイティブ メソッドが呼び出されるように、バイトコード インストルメンテーションを使用してヒープ上のメモリ割り当てを監視することができました。しかし、スタックに割り当てられたメモリの量を決定する方法について、私は本当に混乱しています。アイデア、ヒント、リンクを提供していただければ幸いです。
java - CPU プロファイリング用に Java VisualVM をアタッチすると、JVMTI エラー 66 が発生する
アプリケーションの CPU プロファイリングに VisualVM を使用すると、エラーが発生します。
「Profiler Agent エラー: メッセージ付き: エラー 66 で再定義に失敗しました」.
その上で、すべてのクラス ファイルをビルド パスからアプリケーションを起動した場所にコピーします。
私はそれに関するいくつかの情報を見つけようとしました.エラーコードの意味(JVMTIのドキュメントによると):
JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED (66)
直接のスーパークラスが新しいクラス バージョンと異なるか、直接実装されたインターフェイスのセットが異なります。
プロファイリングは通常、私の環境 (Java ビルド 1.7.0_09-b05、Fedora 17 64 ビット) で機能します。Visualvm-docs に記載されているように、「-Xshare:off」を試しましたが、何の効果もありませんでした。
これは私がこの問題を経験している唯一の Java-SE アプリケーションであるため、私が使用しているライブラリに何らかの形で関連しているようです。以下は私のクラスパスにあります:
- Log4j 1.2.17
- アパッチ OpenJPA 2.2.1
- コモンズ構成 1.9
- コモンズ プール 1.6
- Postgresql 9.1-901jdbc4
- imgscar-lib-4.2
ライブラリとエラーの相関関係を確認できる人はいますか? 私は本当にもうアイデアがありません。