InfoQ

News

Javaの実行をたどる5つ以上の方法

作者 R.J. Lorimer , 翻訳者 編集部 投稿日 2007年12月10日 午前12時56分

コミュニティ
Java
トピック
デバッグ,
パフォーマンス&スケーラビリティ
タグ
Java SE
Zviki Cohen氏(ブログ・英語)は自身の経験に基づき、自分で記述していないコードを理解、探求しながらJavaの実行を辿る5つの方法を書いた(source)。単にソースコードを読むのは(時として逆コンパイルの場合もある)大変地道でしかもエラーを招きやすい。代わりに彼は誰か他の人のコードを学ぶという不都合を排除する、Javaが実行中にJavaコードを観察する5つの方法を勧めている。下記は彼の5つの提案を要約したものである。
  1. 基礎:ブレイクポイントとステップバイステップ実行 "一番シンプルな方法で始める。ブレイクポイントを設定し実行を辿り始める。それは次のような場合にベストである。すばやくシンプルなソリューションが必要で、どこで止まらせたらいいか分かっているコードを持っている時。与えられた点において(オーギュメ ント、ローカル変数等)入念な情報が必要となる。"
  2. 最初に:デバッグメッセージ ”デバッグメッセージを設定して続ける。一番シンプルな方法はメッセージをコンソールにプリントアウトするのにSystem.out.println ステートメントを使用することである。これは次のような場合にベストである。コードを所有していて何を探しているか把握している時。イベントハンドラにはとても適したソリューションである。その高パフォーマンスがコンプレックスフローの実行時全体を通して、どのイベントがリリースされるかを理解するのを実際的なものにする。
  3. ホットスポット:動的プロキシ ”シンプルなデバッグメッセージにおける向上。デベロッパたちがプロキシクラスを導入するのを可能にするJavaの特別な機能である。これは、与えられたクラスの前に適用し、与えられたインタフェースからの全ての呼び出しを監視することができる。これは次のような場合にベスト である。イベントハンドラにとっては素晴らしいソリューションである。ダミーのイベントハンドラを数秒内にジェネリックプロキシと一緒に設定することができ、イベントのシーケンスを見ることができる。イベントハンドラを理解するのにはこれが一番シンプルで速いメソッドである。"
  4. Brute Force:ランタイムプロファイラ”プロファイラは特別なJMVフックを通してシステム内の全ての呼び出しを辿る非常に強力なツールである。でもそれは0.5インチの釘に10ポンドのハンマーを使うようなものなのである。これは次のような場合にベストである。非常に具体的なオペレーション(例:大変短い実行フロー)用の完全な画が欲しい時である。
  5. New Age:アスペクト ”アスペクト指向のプログラミング(AOP)は重要な概念である。アスペクトの概念まで掘り下げずに、結論だけに注目している。これはあなたのコードの実行を妨害するのに大変手っ取り早い方法である。オリジナルのコードを修正する必要なしにメソッド、コンストラクタ、フィールドアクセス等の周りにフックを選択的に設定することができる。このフック内でデバッグメッセージをプリントすることができる。ベストな使用目的は、再構築できるコードの実行を辿りたい時である。

2007年の2月までZviki Cohen氏はAmdocs(サイト・英語)のアーキテクトとシニアコンサルタントであったが、現在はソフトウェア業界のフリーランスである。

原文はこちらです:http://www.infoq.com/news/2007/12/5ways

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
slashdot+
Hatena

特集コンテンツ一覧

Flex 4の新機能トップ10

今週(2009年6月1日)AdobeはFlex 4の正式な初ベータ版をリリースしました。Flex 4はGumbo(オクラ)というコードネームで開発されています。今回のリリースには大きな変更が多数含まれています。このRIAフレームワークの最新バージョンにおいて変更された事柄についての概要を以下のリストで見ていきましょう。

Domain Driven Design(ドメイン駆動設計) Quickly 日本語版

ビジネス領域の深い理解を反映したドメインモデルを設計するための、ヴィジョンとアプローチです。この本は、Eric Evans氏の「Domain Driven Design」の主要点を短く読みやすく要約しました。

JavaプログラマがFlexとBlazeDSを学んだ方がいい13の理由

この記事ではJavaプログラマがなぜFlexとBlazeDSを学ぶべきなのかについて13の理由を述べています。なぜ高度にインタラクティブなWeb サイトからJavaで開発されたバックエンドをもつエンタープライズ・アプリケーションまでを含む、リッチ・インターネット・アプリケーション(RIA)の開発にFlexとBlazeDSの組み合わせが最適な選択肢となるのかについて述べています。

仮想パネル: バックログは重要な成果物とプラクティスか、それとも無駄か?

Mary Poppendieck氏、Ron Jeffries氏、Jeff Patton氏、David West氏、Steve Freeman氏、Jason Yip氏が、バックログに関する彼らの意見とアジャイルチームを成功させるために必要な事を語った。

Perf4Jを使ったパフォーマンス解析とモニタリング

この記事ではAlex Devine氏が、Java開発者がPerf4Jをどのように利用できるかと、タイミングステートメントにコードを追加し、ロギング、結果の解析とモニタリングを行うオープンソースツールセットの説明をします。

複雑な外部DSLを開発する

本稿では、Vaughn Vernon氏が内部DSLと外部DSLの違いを説明し、複雑な外部DSLを開発する際のステップを示します。

J2EEアプリケーションにおけるAOPを使ったフェッチ戦略の実装

この記事では低レベルのサービス・レイヤやリポジトリ・レイヤを肥大化させることなく、フェッチング・ストラテジによってモジュール化された方法でバックエンドにあるシステムからデータを取得する処理を最適化する方法について説明します。

実証済みのアイデアの融合: S#arp Architectureの裏側

この記事では、Web開発における多数の成熟傾向と、クライアントに価値を提供することに対するそれらのメリット、およびS#arp Architecture(最善の手法と技術を活用しようとするASP.NET MVCをベースとしたフレームワーク)内でのそれらの使用について取り上げます。