トップスポーツチームの監督に教わる秘訣
この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。
作者 Werner Schuster, 翻訳者 編集部 投稿日 2008年2月26日 午後12時50分
JRuby 1.1 RC2がリリースされ(source)、RC1よりもかなりの改良が見られた。- JRuby 1.1RC1より260もの問題点が解決されたOniguruma RegexエンジンのJavaポート(参考記事)は別として、JRuby 1.0に対するJRuby 1.1の最大の性能の改善はJust In Time (JIT)コンパイラーの導入で、RubyコードでJVMバイトコードにコンパイルするものである。しかしながら、JVM言語の実装が対処すべき問題も提 示する。
- 大規模なIOリファクタリング
- JITされたメソッドのメモリ改良
- JIT'されたメソッドの総数を制御
- ランライムと戻りpermgen間のJITキャッシュをサポート
- 生成済みメソッドのコードサイズを縮小(50から70%の縮小)
コンパイルするためにRuby標準ライブラリを大いに使用し、プラグインを十二分に使用し、JRubyで使用可能なたくさんのメソッドを使用する重要な Railsのアプリケーションは、優に10000を超えるということを検討してみる。単一のJRubyメソッドクラスの平均的なオーバーヘッドは、およそ 8K(もちろんメソッドサイズにより変化)である場合、これはpermgen空間の80メガバイトまで占める可能性がある。(それとは対照的に、デフォル トのJVMのpermgen空間サイズは64メガバイトであるので、すでに限度を越えている)。これは、非常に現実的な問題である。PermGenは一般的なJavaヒープのような振る舞いをする。決まったサイズがありPermGenがいっぱいになると、OutOfMemory例外が発行されて、最終的にJVMは終了する。
4つのRailsアプリケーションをそれぞれ4つのアクティブランタイムで1つのアプリケーションサーバにデプロイする場合、アプリケーションの実行にお よそ1.2ギガバイトのpermgen空間を検討しているだろう。(たいてい、Javaアプリケーションサーバで複数のアプリケーションを実行することは 一般的であるが、Railsアプリケーションの場合では、再検討する必要があるかもしれない)。
Nick Sieger氏は、RC2でのこの問題に対するさまざまなソリューションについて説明している。
こうした倍増していくコストのため、JRuby1.1がリリースされて間もなく、いく分抜本的な対策を講じて、それぞれのランタイムが2048回まで JITコンパイルするというメソッド回数の上限を設けた。しばらくしてしきい値ベースのアプローチでさえも、コンパイルされたメソッドの重複コピーで JRubyはまだ多くのpermgen空間を無駄にしていることが、明らかになった。そこで1.1RC2では、JIT キャッシュを導入し複数のランタイム間で、共有できるように設定した。
動的言語の実装における1つの痛点が、コードを動的に管理している。実装者はメソッドの本体およびその本体の要求された呼び出しシーケンスへのリンケージに注目している一方で、コードを適切に配置するためJVMが要求する関連詳細がある。以下のような詳細である。もちろん、.NETのDynamic MethodsはJVMでは利用できない。プロトタイプが利用可能なDa Vinci Machineプロジェクト(source)で研究がおこなわれているが、いつそのような機能が次回のJavaのリリースで利用可能になるのかは、 現時点では不明である。
- メソッド名
- エンクロージングクラス名
- その他の名前が付けられたエンティティーに関するさまざまなアクセス制限
- クラスローダーおよびプ保護ドメイン
- リンケージおよび初期化状態
- クラス階層の配置(クラスが一度もインスタンス作成されていない場合でも)
こういった詳細は実装者の作業を阻害するものとなり、たいていの場合さまざまな例外オーバーヘッドの原因となる。指定された名前のクラス(およびクラス ローダー)は一度正確に定義される必要があり、その後でその名前(Class.forNameを経由)からのみリカバリー可能である必要があるので、 JVMは新たに定義されたクラスをその定義しているクラスローダーおよびシステム辞書と呼ばれるデータ構造に接続する必要がある。そしてその後のリンケー ジ要求を処理する。このような関係を築くには時間がかかる。その理由としては特に、さまざまなシステムロックを取る必要があるからである。また、GCによ る未使用コードの収集をさらに難しいのもにしている。
12/5 CSQ会員限定技術情報交換会にてJCP議長が標準化について語る
12/16 ~野村総合研究所が提案~ 「不況を乗り切る!効果的なIT投資を考えるセミナー」
InfoQ Japanはコンポーネントスクエアが運営しています
この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。
マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。
筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。
エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。
この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。
No comments
返信