人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: afternoontea
●カテゴリ:コンピュータ
✍キーワード:GC Java
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● zizz_walla
●80ポイント

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()は使わないが、「標準出力のリダイレクト」は利用

http://www.gimlay.org/~javafaq/S103.html

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

◎質問者からの返答

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

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

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

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

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

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


2 ● zizz_walla
●20ポイント

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回目の回答となりますので、今後の回答はいわしにて行いたいと思います。

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

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ