6

私が覚えているように、Java には、現在実行されている操作のコンソールへの書き込みをオンにする魔法のコマンド ライン オプションがあります。出力はバイトコードのように見えます。

-verboseクラスのロードのみを出力するため一致しませんが、このオプションはメモリ割り当て、ローカル変数の設定などの情報を出力します。「Hello world」の 10 行など、非常に詳細でした。

ここでは見つかりませんでしたhttps://www.oracle.com/java/technologies/javase/vmoptions-jsp.htmlまたはここhttps://docs.oracle.com/javase/1.5.0/docs/tooldocs/ solaris/java.html . また、いくつかのフラグを見つけましたが、それらのほとんどは openjdk または開発モードでのみ機能します。Windows でこの開発モードで java.exe を起動する方法はありますか? それとも、これらのリストにない別のフラグのセットがあるのでしょうか?

4

4 に答える 4

2

あなたが尋ねたものとはまったく異なりますが、私はJavaプロセスIDの「kill -3」の大ファンです。これは、すべてのスレッドとそれらがどのような状態にあるか、どのロックを保持しているか、どのロックを保持しているかに関するあらゆる種類の情報をダンプします待っている、とそのようなこと。

于 2010-05-31T16:15:29.637 に答える
1

私はjvisualvm最近かなり使っています。多分それはあなたが望むものを与えるでしょうか?メモリと CPU の両方の使用状況のプロファイリングを行い、スレッド スタックをダンプし、JVM を説得して、進行中のクラスローダー アクティビティを一覧表示することさえできます (MBean サポートを介して: java.lang→<code>ClassLoading に移動し、選択Attributesして更新しVerboseます。それでもダンプします)。System.outもちろん)。これの素晴らしい点は、(通常は) 有効にするために何もする必要がないことです。すでに実行中の JVM にアタッチするだけです。(Java 1.5 をお持ちの場合は、jconsole代わりに使用してください。)

ただし、実行されたバイトコードのダンプを取得する可能性は低いことに注意してください。これは、かなり前から存在している HotSpot JIT エンジンが、実行前にバイトコードをネイティブ命令に変換するためです。そのため、コードが実際に実行されるまでには、インストルメンテーションが報告するバイトコードがまったく残っていません。理論的には、古い方法で動作する特別な VM を構築できるかもしれませんが、(昔のように) 恐ろしく遅くなります。

于 2010-06-01T08:12:35.337 に答える
1

Windows では、Ctrl-Break を使用してスレッド ダンプを作成します。-verbose:classガベージ コレクションのクラスローディングの使用を監視する には-verbose:gc

于 2010-05-31T16:19:39.237 に答える
1

サポートされているオプションはこちら. あなたの説明に最も近いのは-verbose:gc、またはおそらく-verbose:classです。

javapはバイトコードを出力しますが、これは静的な逆アセンブラーであり、ランタイムには関係ありません。

于 2010-05-31T16:20:47.160 に答える