- PR -

「class loader」の役割は?

1
投稿者投稿内容
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2003-05-18 00:00
こんにちわ
いつもお世話になっております。
「class loader」って
これまでは全然意識しないでJavaをやってきましたが
Q1.どんな場合これを意識しなければならないのでしょうか。
Q2.例えば、 「bootstrap class loader」など各種ローダーはどんな場合に
使われるのでしょうか。

ご教授お願い致します。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2003-05-19 02:08
issekiさんこんにちは、
私なりの理解なので役に立つかどうか分かりませんが、まとめて見ました。

A1.沢山あると思います。
・クラスのライフサイクルの管理
 クラスローダを使いこなせないと、一度ロードしたクラスはVMを終了させないと更新できないでしょう。
・セキュリティ
 信頼できるクラスをロードしたり、アクセスできる資源を管理するためには理解する必要があります。
 単一の VMで互いに干渉しない複数のコンテキストを保持するために必要。(サンドボックス、各種コンテナ…)
・リソースの管理
 これ知らないと、クラスは勿論、イメージや音声など様々なリソースへのアクセスに不自由すると思われます。

A2.各種ドキュメントをご覧下さい。
ブートストラップクラスに付いては、つぎが詳しいです。http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/findingclasses.html
良く使うクラスは、
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/ClassLoader.html
  個々のクラスを意識せずにリソースにアクセスする場合はこの抽象クラスを用います。
  何か気の効いたことをやりたい場合もこれをサブクラス化して使います。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/net/URLClassLoader.html
  ファイルシステム、Jarファイル、ネット上からリソース(クラスファイルを含む)をロードできます。

使用例)恥ずかしながら,私が使った例を2〜3紹介します。
・サーブレットコンテナ
 動的にサーブレットをロードしたり破棄するためにクラスローダを活用してます。
 オブジェクトのプール機構とも連動させてます。
 サービスを停止することなく、安全にクラスを更新する事も可能です。

・暗号化されたクラスファイル
 通常のクラスファイルは簡単にリバースできてしまいます。
 時には解析されたくない場合もあります。
 オブファスケータを用いると、変数やメソッド名とかが分かりにくくなるだけです。
 クラスファイルを暗号化しておいて、実行時にクラスローダで復号することで、より解析されにくくなります。(VMの知識があれば解析できてしまいますが。)
 使用権毎に復号キーを設定することにより、ある程度、契約違反者を特定できます。
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2003-05-19 23:08
Kissingerさん
こんにちわ
丁寧なご教授有難うございます。

class loader はやはり重要ですね。
どの機能も凄いです。
特にサーバーサイドにとってかな(これに経験に薄いですが)

Kissinger様が書かれました↓
>これ知らないと、クラスは勿論、イメージや音声など様々なリソースへのアクセスに不自由すると思われます。

そうですか。
あとはCLASS暗号化と複合化機能ですねーーーー最高!
早速勉強します。

改めて御礼を申し上げます。
また宜しくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)