部分的再ロードによるJavaプログラムの再起動の高速化

書誌事項

タイトル別名
  • ブブンテキ サイロード ニ ヨル Java プログラム ノ サイキドウ ノ コウソクカ
  • A Technique for Quick Restarting of Java Applications by Partial Class Reloading

この論文をさがす

説明

一部のクラスの定義を変えてプログラムを再起動するには,新たに作成したクラスローダを用いてアプリケーションを再ロードする必要がある.この手法は,たとえば HOT デプロイで利用されている.しかし,アプリケーションの全クラスの再ロードによる時間的コストが大きく,サーバのパフォーマンスを低下させてしまう.そこで本稿では,アプリケーションを部分的に再ロードすることで再起動を高速化する手法を提案する.再起動時にどのクラスが変更されたかが分かれば,変更対象クラスとそれに依存しているクラスのみを子ローダで再ロードすることで,その他のクラスは親ローダでロード済みのものを再利用できる.また,アプリケーションの各クラスに複数の版があり,それらを組み合わせて何度も再起動をする状況下では,各クラスの各版ごとにクラスローダを作成し,それらがロード済みの版のクラスを再利用することで再ロードのコストを軽減できる.しかし,後者の手法では多くのクラスを変更する際,削減できる再ロードのコストに対してクラスローダインスタンスの作成によるコストが大きくなりすぎる場合がある.そこで上記の 2 つの手法を per-session AOP を用いたフレームワークに実装し,実験を行った.その結果から,どちらの手法を使うべきかの指針を示した.

To modify the definitions of some classes of an application and restart it, the application should be reloaded by a new class loader. This approach is, for example, used for HOT deployment. However, it degrades the performance of a server application if all the classes of an application are reloaded. This paper proposes a technique to speed up restarting an application by partial class reloading. When an application is restarted, since we know which classes are modified at this time, we can reuse classes that have been already loaded and are not changed at this restart. Furthermore, when each class of an application has some versions and the application is restarted repeatedly with combination of different versions of classes, we can reduce reloading costs by creating a class loader responsible for loading each version of a class. This allows us to reuse not only original classes but also various versions of each class. However, the latter approach may degrade the performance because a large number of class loader instances are created when we modify a number of classes. We applied above two approaches to our per-session AOP framework respectively and provided guidelines which approach you should use.

収録刊行物

関連プロジェクト

もっと見る

キーワード

詳細情報 詳細情報について

問題の指摘

ページトップへ