Javaで-verbose:gcの出力をTextAreaに表示したい

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:zizz_walla No.1

回答回数121ベストアンサー獲得回数0

ポイント80pt

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1061886&rev=1

実行結果をSwingで表示 - 教えて!goo

-verbose:gc の出力は、標準出力ですので、リダイレクトして取り出してやります。

この場合、URL先の

 (2)Runtime#exec()

 (3)Runtime#exec()は使わないが、「標準出力のリダイレクト」は利用

の方法のどちらかを使うと実現できます。プロセスが別でも良いなら(2)を、同一のプロセスでやりたいなら(3)で実現すると良いと思います。

(2)Runtime#exec()

方法3. Runtime#exec()は使わないが、「標準出力のリダイレクト」は利用

[Q2]にRuntime#exec()の使用例があります。

id:afternoontea

やりたいのは同一プロセス上です。

自プロセスのGCの発生を画面に表示したいのですが(3)のSystem#setOut()ではVMの出力する

[GC 1133K->627K(3136K), 0.0011828 secs]

という文字列を取得することができません。

System.out.println()したものは取得できるのですが…。

これはもしかして外部コマンドとして実行してProcess#getInputStream()をアプリケーションのServerSocketへ送るとかやらないとダメなのでしょうか?

2004/12/30 11:39:18
id:zizz_walla No.2

回答回数121ベストアンサー獲得回数0

ポイント20pt

http://www.hatena.ne.jp/1104341857#

人力検索はてな - Javaで-verbose:gcの出力をTextAreaに表示したい

URLはダミーです。

JVMの標準出力を取り出しますので、OSレベルのリダイレクトを利用する必要があります。

起動プロセスと実行プロセスを分けて、起動プロセスで、Process#getInputStream()をポーリングし、取得した結果をプロセス間通信を使ってメインプロセスへ送信してあげるのがよろしいかと思います。プロセス間通信としては、afternoontea様が想像されているソケットまたはRMIを使えばいけるのではないでしょうか。

別の代案としては、メインプロセスを実行するために java クラス名 としているところを

java クラス名 > gclog.txt

のようにOSレベルのリダイレクトとして出力しておき、そのファイル(上の例ではgclog.txt)をメインプロセスから読み込み専用でオープンしたファイルストリームで取得すればいけると思います。

これで、2回目の回答となりますので、今後の回答はいわしにて行いたいと思います。

ご希望ならサンプル作成しますのでいわしにてご連絡ください。

id:afternoontea

ソケットを使う方法でやってみます。

ありがとうございました。

2005/01/03 20:56:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません