(57)【特許請求の範囲】
【請求項１】
低減されたラン−タイム空間要求を有する実行の複数のスレッドを実行するコンピュータ・システムであって、
ラン−タイム・メモリ；
（Ａ）スレッドを実行し、それによりスレッドが異なる時間で実行可能及び実行不能であり、かつ（Ｂ）実行データが生成されるときにスレッドの実行データをラン−タイム・メモリの利用可能空間に圧縮しないで記憶する実行コントローラ；及び
（Ａ）実行不能であるスレッドの圧縮可能なものの圧縮されていない実行データまたはその部分をラン−タイムメモリで圧縮し、それにより空間がラン−タイム・メモリにおいて利用可能になり、かつ（Ｂ）スレッドの圧縮解除可能なものが実行可能になった後で実行されうるようにスレッドの圧縮解除可能なものの圧縮された実行データをラン−タイム・メモリの利用可能空間に圧縮解除するデータ・コンプレッサを備えていることを特徴とするコンピュータ・システム。
【請求項２】
前記データ・コンプレッサは、スレッドの圧縮解除可能なものが実行可能になったならばスレッドの圧縮解除可能なものの圧縮された実行データを圧縮解除する請求項１に記載のコンピュータ・システム。
【請求項３】
所定の時間間隔後にスレッドの圧縮解除可能なものの圧縮された実行データを圧縮解除する請求項１に記載のコンピュータ・システム。
【請求項４】
前記データ・コンプレッサは、スレッドの圧縮可能なものが実行不能になったならばスレッドの圧縮可能のものの圧縮されていない実行データまたはその部分を圧縮する請求項１、２または３に記載のコンピュータ・システム。
【請求項５】
前記データ・コンプレッサは、ラン−タイム・メモリが必要であるが利用可能でないときにスレッドの圧縮可能なものの圧縮されていない実行データまたはその部分を圧縮する請求項１、２または３に記載のコンピュータ・システム。
【請求項６】
最も古く実行されたスレッドから最も新しく実行されたスレッドの順で現在実行不能であるスレッドのそれらをリストする最も古く実行されたリスト；を更に備え、
スレッドの圧縮可能なものは、ラン−タイム・メモリの空間が必要であるが利用可能でないときに圧縮されていない実行データを有する最も古く実行されたリストの最も古く実行されたスレッドであることを特徴とする請求項５に記載のコンピュータ・システム。
【請求項７】
二次メモリ；
（Ａ）ラン−タイム・メモリの空間が必要であるが利用可能でないときにスレッドの記憶可能なものの圧縮された実行データまたはその部分を二次メモリに記憶し、かつ（Ｂ）その圧縮された実行データがラン−タイム・メモリで圧縮解除されるべきであるようなスレッドの検索可能なものの圧縮された実行データまたはその部分を検索するデータ・コンプレッサ；
を更に備えていることを特徴とする請求項１から６のいずれか一項に記載されたコンピュータ・システム。
【請求項８】
低減されたラン−タイム・メモリ空間要求を有する実行の複数のスレッドを実行する方法であって、
ラン−タイム・メモリを供給し；
スレッドを実行し、それによりスレッドが異なる時間で実行可能及び実行不能であり；
実行データが生成されたときにスレッドの実行データをラン−タイム・メモリの利用可能な空間に圧縮しないで記憶し；
実行不能であるスレッドの圧縮可能なものの圧縮されていない実行データまたはその部分を圧縮し、それにより空間がラン−タイム・メモリで利用可能になり；かつ
スレッドの圧縮解除可能なものが実行可能になった後に実行されうるようにスレッドの圧縮解除可能なものの圧縮された実行データをラン−タイム・メモリの利用可能な空間に圧縮解除する段階を具備することを特徴とする方法。
【請求項９】
前記圧縮解除段階は、スレッドの圧縮解除可能なものが実行可能になったならばスレッドの圧縮解除可能なものの圧縮された実行データを圧縮解除する段階を含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記圧縮解除段階は、所定の時間間隔後にスレッドの圧縮解除可能なものの圧縮された実行データを圧縮解除する段階を含むことを特徴とする請求項８に記載の方法。
【請求項１１】
前記圧縮段階は、スレッドの圧縮可能なものが実行不能になったならばスレッドの圧縮可能のものの圧縮されていない実行データを圧縮することを含む請求項８、９または１０に記載の方法。
【請求項１２】
前記圧縮段階は、ラン−タイム・メモリが必要であるが利用可能でないときにスレッドの圧縮可能なものの圧縮されていない実行データを圧縮することを含む請求項８、９または１０に記載の方法。
【請求項１３】
最も古く実行されたスレッドから最も新しく実行されたスレッドの順で現在実行不能であるスレッドのそれらをリストする最も古く実行されたリストを供給する段階を更に具備し；
スレッドの圧縮可能なものは、ラン−タイム・メモリの空間が必要であるが利用可能でないときに圧縮されていない実行データを有する最も古く実行されたリストの最も古く実行されたスレッドであることを特徴とする請求項１２に記載の方法。
【請求項１４】
二次メモリを供給し；
ラン−タイム・メモリの空間が必要であるが利用可能でないときにスレッドの記憶可能なものの圧縮された実行データまたはその部分を二次メモリに記憶し；かつ
その圧縮された実行データがラン−タイム・メモリで圧縮解除されるべきであるようなスレッドの検索可能なものの圧縮された実行データまたはその部分を前記二次メモリから検索する段階を更に具備することを特徴とする請求項８から１３のいずれか一項に記載された方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、低減されたラン−タイム・メモリ空間要求を有する多重スレッド環境におけるプログラムを実行する方法及びコンピュータ・システムに関する。特に、本発明は、メモリ空間要求を低減するようにスレッドが実行不能であるときにスレッドの実行データが圧縮されるような実行のスレッドを実行する方法及びコンピュータ・システムに関する。
【０００２】
【従来の技術】
コンピュータ・システムは、いま、そのコードが、以後ＡＮコードと呼ぶ、アーキテクチャ・ニュートラル（ＡＮ）２進フォーマットで表されるプログラムの特性を利用すべく構築または構成されている。それゆえに、これらのプログラムのＡＮコードは、コンピュータ・システムの特定のアーキテクチャまたはプラットフォームに独立である。
用語アーキテクチャは、コンピュータ・モデルのファミリーのオペレーティング特性を意味すべくこの文書の目的に対して定義される。特定のアーキテクチャの例は、マッキントッシュ(Macintosh) ・コンピュータ、ＤＯＳまたはＷｉｎｄｏｗｓオペレーティング・システムを用いているＩＢＭ  ＰＣコンパチブル・コンピュータ、Solaris オペレーティング・システムを走らせているサン・マイクロシステムズ(Sun Microsystems)コンピュータ、及びユニックス(Unix)オペレーティング・システムを用いているコンピュータ・システムを含む。
【０００３】
用語アーキテクチャ特定（ＡＳ）は、ある一定のプログラムのコードが、特定のコンピュータ・アーキテクチャを有するコンピュータ・システムでのみの実行のために、ＡＳコードと以下で呼ばれる、２進フォーマットである要求（事項）を参照すべくこの文書の目的に対して画定される。それゆえに、通常のプログラミング言語（例えば、80486 アセンブラ言語）で書かれかつ特定のアーキテクチャ（例えば、ＩＢＭコンパチブルＰＣ）に対してコンパイルされたコードを有するプログラムは、そのアーキテクチャまたはそのアーキテクチャのエミュレータでのみ走らせることができる。
用語アーキテクチャ・ニュートラル（ＡＮ）は、そのコンパイルされたコードが異なるアーキテクチャを有する種々のコンピュータ・システムで実行することができるプログラムを参照すべくこの文書の目的に対して定義される。例えば、特定のアーキテクチャを有するコンピュータ・システムは、Java（サン・マイクロシステムズの登録商標）仮想マシン・モジュールで構成することができる。Java仮想マシン・モジュールは、Javaプログラミング言語で書かれ、かつ  Java仮想マシンの命令セットに対して、以後Javaバイトコードと呼ぶ、バイトコードにコンパイルされたコードを有するプログラムの実行が可能である。Javaバイトコードは、コンピュータ・システムの特定のアーキテクチャに独立である。
【０００４】
ＡＮコードを有するプログラムの重要な特徴は、それらの小型性(portability) を含む。例えば、ＡＮコードのプログラムは、コンピュータ・システムの特定アーキテクチャに係わりなくＡＮコードを実行すべく構成されたあらゆるコンピュータ・システムで実行することができるので、これらのプログラムは、一つのコンピュータ・システムから別のコンピュータ・システムにネットワークにわたり容易に移送することができる。例えば、Javaバイトコードにコンパイルされたプログラムは、Java仮想マシン・モジュールを有するあらゆるコンピュータ・システムで実行することができかつHot Java（サン・マイクロシステムズの登録商標）ネットワーク通信マネージャを用いて一つのコンピュータ・システムから別のコンピュータ・システムにネットワークにわたり容易に移送することができる。
【０００５】
更に、Javaバイトコードにコンパイルされたプログラムの小型性に関する別の重要な特徴は、そのようなプログラムの確認性である。特に、Java仮想マシン・モジュールは、これらのプログラムが所定の完全性基準(integrity criteria)を満足するということを容易に確認することができる。そのような完全性基準は、JavaバイトコードがJava仮想マシン・モジュールのスタックをオーバーフローまたはアンダーフローすることができずかつJavaバイトコードの全ての命令がそのデータ型がそれらの命令に対するデータ型制限に一致するデータだけを用いるということを確実にするスタック及びデータ型(stack and data type) 使用制限を含む。結果として、Javaバイトコードのプログラムは、オブジェクト・ポインタをフォージ(forge) することができずかつ一般的にユーザが用いるべき許可をそれに明示的に与えるもの以外のシステム資源をアクセスすることができない。
【０００６】
これらの理由で、コンピュータ・システムは、ネットワークにわたり受信されるＡＮコードにコンパイルされたプログラムの実行に対して構成されている。事実、ある場合には、プログラムがコンピュータ・システムのラン−タイム（即ち、実行−時間）メモリ（例えば、ランダム・アクセス・メモリ（ＲＡＭ））に直接ロードされるので、そのようなコンピュータ・システムは、二次メモリ（例えば、ハード・ディスク）さえも要求しないであろう。その結果、そのようなコンピュータ・システムのユーザは、ソフトウェア製品で現在一般的であるソフトウェア購入、設置、構成及びアップグレードのサイクルから解放される。
更に、多くのソフトウェア・プログラム（即ち、アプリケーション）は、実行の多重スレッドで実行されうる。スレッドは、プログラムをよりレスポンシブにさせ、高速で走らせる、等のために用いることができる。
【０００７】
上記の観点から、ＡＮコードのマルチ・スレッド・プログラムは、ネットワークされかつ要求に応じてＡＮコードでロードされる安いコンピュータ・システム用に特に魅力的である。例えば、これらの種類のコンピュータ・システムは、ビデオ・ゲーム、パーソナル・ディジタル・アシスタント（ＰＤＡｓ）、セルラー電話機、または他の類似するコンピュータ・システムまたはコンピュータ動作型デバイスでありうる。
そのようなコンピュータ・システムに対して、低価格は、非常に重要である。実際に、そのようなコンピュータ・システムを構築することにおける最も重要な費用の一つは、ソフトウェア・インフラストラクチャ及びプログラムを走らせるために必要なラン−タイム（即ち、実行−時間）メモリの量である。これは、ソフトウェア・インフラストラクチャ及びプログラムのコードを記憶するために必要である静的メモリから区別されるべきである。そのような低減が強力な競合利点を生成するので、ちょうど説明した種類のコンピュータ・システムによって要求されるラン−タイム・メモリの量を低減することは、非常に重要である。
【０００８】
【発明が解決しようとする課題】
特定的に、多重スレッド環境では、スレッドは、一般に、スレッドを実行するために必要な実行データを記憶すべくラン−タイム（即ち、実行−時間）メモリの一つ以上の専用領域（即ち、範囲）を用いて一部インプリメントされる。これらの専用領域は、一般に、スタック(stacks)、ヒープ(heaps) 、または個別スレッド−ローカル変数の形でありかつスレッドのラン−タイム記憶費用を表す。それゆえに、プログラムのラン−タイム記憶費用は、全てのそのスレッドのラン−タイム記憶費用の合計であり、プログラムの静的記憶費用は、そのコードを記憶するために用いられるメモリの量である。それゆえに、プログラムを支援するために必要なコンピュータ・システムの記憶要求を低減するために各スレッドの平均ラン−タイム記憶費用を低減することが望ましい。
【０００９】
本発明の目的は、上記従来技術における問題点に鑑み、記憶要求を低減するために各スレッドの平均ラン−タイム記憶費用を低減する方法及びコンピュータ・システムを提供することである。
【００１０】
【課題を解決するための手段】
本発明の上記目的は、低減されたラン−タイム空間要求を有する実行の複数のスレッドを実行するコンピュータ・システムであって、ラン−タイム・メモリ；
（Ａ）スレッドを実行し、それによりスレッドが異なる時間で実行可能及び実行不能であり、かつ（Ｂ）実行データが生成されるときにスレッドの実行データをラン−タイム・メモリの利用可能空間に圧縮しないで記憶する実行コントローラ；及び（Ａ）実行不能であるスレッドの圧縮可能なものの圧縮されていない実行データまたはその部分をラン−タイムメモリで圧縮し、それにより空間がラン−タイム・メモリにおいて利用可能になり、かつ（Ｂ）スレッドの圧縮解除可能なものが実行可能になった後で実行されうるようにスレッドの圧縮解除可能なものの圧縮された実行データをラン−タイム・メモリの利用可能空間に圧縮解除するデータ・コンプレッサを備えているコンピュータ・システムによって達成される。
【００１１】
本発明のコンピュータ・システムでは、データ・コンプレッサは、スレッドの圧縮解除可能なものが実行可能になったならばスレッドの圧縮解除可能なものの圧縮された実行データを圧縮解除するように構成してもよい。
本発明のコンピュータ・システムでは、所定の時間間隔後にスレッドの圧縮解除可能なものの圧縮された実行データを圧縮解除するように構成してもよい。
本発明のコンピュータ・システムでは、データ・コンプレッサは、スレッドの圧縮可能なものが実行不能になったならばスレッドの圧縮可能のものの圧縮されていない実行データまたはその部分を圧縮するように構成してもよい。
本発明のコンピュータ・システムでは、データ・コンプレッサは、ラン−タイム・メモリが必要であるが利用可能でないときにスレッドの圧縮可能なものの圧縮されていない実行データまたはその部分を圧縮するように構成してもよい。
【００１２】
本発明のコンピュータ・システムでは、最も古く実行されたスレッドから最も新しく実行されたスレッドの順で現在実行不能であるスレッドのそれらをリストする最も古く実行されたリスト；を更に備え、
スレッドの圧縮可能なものは、ラン−タイム・メモリの空間が必要であるが利用可能でないときに圧縮されていない実行データを有する最も古く実行されたリストの最も古く実行されたスレッドであってもよい。
本発明のコンピュータ・システムでは、二次メモリ；（Ａ）ラン−タイム・メモリの空間が必要であるが利用可能でないときにスレッドの記憶可能なものの圧縮された実行データまたはその部分を二次メモリに記憶し、かつ（Ｂ）その圧縮された実行データがラン−タイム・メモリで圧縮解除されるべきであるようなスレッドの検索可能なものの圧縮された実行データまたはその部分を検索するデータ・コンプレッサ；を更に備えてもよい。
【００１３】
また、本発明の上記目的は、低減されたラン−タイム・メモリ空間要求を有する実行の複数のスレッドを実行する方法であって、ラン−タイム・メモリを供給し；スレッドを実行し、それによりスレッドが異なる時間で実行可能及び実行不能であり；実行データが生成されたときにスレッドの実行データをラン−タイム・メモリの利用可能な空間に圧縮しないで記憶し；実行不能であるスレッドの圧縮可能なものの圧縮されていない実行データまたはその部分を圧縮し、それにより空間がラン−タイム・メモリで利用可能になり；かつスレッドの圧縮解除可能なものが実行可能になった後に実行されうるようにスレッドの圧縮解除可能なものの圧縮された実行データをラン−タイム・メモリの利用可能な空間に圧縮解除する段階を具備する方法によって達成される。
【００１４】
本発明の方法では、圧縮解除段階は、スレッドの圧縮解除可能なものが実行可能になったならばスレッドの圧縮解除可能なものの圧縮された実行データを圧縮解除する段階を含むようにしてもよい。
本発明の方法では、圧縮解除段階は、所定の時間間隔後にスレッドの圧縮解除可能なものの圧縮された実行データを圧縮解除する段階を含むようにしてもよい。
本発明の方法では、圧縮段階は、スレッドの圧縮可能なものが実行不能になったならばスレッドの圧縮可能のものの圧縮されていない実行データを圧縮することを含むようにしてもよい。
本発明の方法では、圧縮段階は、ラン−タイム・メモリが必要であるが利用可能でないときにスレッドの圧縮可能なものの圧縮されていない実行データを圧縮することを含むようにしてもよい。
【００１５】
本発明の方法では、最も古く実行されたスレッドから最も新しく実行されたスレッドの順で現在実行不能であるスレッドのそれらをリストする最も古く実行されたリストを供給する段階を更に具備し；スレッドの圧縮可能なものは、ラン−タイム・メモリの空間が必要であるが利用可能でないときに圧縮されていない実行データを有する最も古く実行されたリストの最も古く実行されたスレッドであってもよい。
本発明の方法では、二次メモリを供給し；ラン−タイム・メモリの空間が必要であるが利用可能でないときにスレッドの記憶可能なものの圧縮された実行データまたはその部分を二次メモリに記憶し；かつその圧縮された実行データがラン−タイム・メモリで圧縮解除されるべきであるようなスレッドの検索可能なものの圧縮された実行データまたはその部分を二次メモリから検索する段階を更に具備するようにしてもよい。
【００１６】
【作用】
纏めると、本発明は、低減されたラン−タイム・メモリ空間要求を有する実行の複数のスレッドを実行するためのコンピュータ・システム及び関連方法である。コンピュータ・システムは、ラン−タイム・メモリ、実行コントローラ、及びデータ・コンプレッサを備えている。
実行コントローラは、異なる時間にスレッドが実行可能及び実行不能であるようにスレッドの実行を制御する。実行コントローラは、また、実行データが生成されるときにときにスレッドの実行データをラン−タイム・メモリの利用可能空間に圧縮しないで記憶する。
データ・コンプレッサは、実行不能であるスレッドの圧縮可能なものの圧縮されていない実行データまたはその部分を圧縮する。結果として、空間は、ラン−タイム・メモリで利用可能になる。データ・コンプレッサは、また、それらが実行可能になるときにスレッドの圧縮解除可能なものが実行されうるようにその実行データが圧縮されるスレッドの圧縮解除可能なものの圧縮された実行データまたはその部分をラン−タイム・メモリの利用可能な空間で圧縮解除する。
【００１７】
一実施例では、データ・コンプレッサは、それらが実行可能になると即にスレッドの圧縮解除可能なものの圧縮された実行データを圧縮解除する。
別の実施例では、データ・コンプレッサは、所定の時間間隔後にスレッドの圧縮解除可能なものの圧縮された実行データを圧縮解除する。
さらに別の実施例では、データ・コンプレッサは、それらが実行不能になると即にスレッドの圧縮可能なものの圧縮されていない実行データを圧縮する。
また別の実施例では、データ・コンプレッサは、ラン−タイム・メモリにおける空間が必要であるが利用可能でないときにスレッドの圧縮可能なものの圧縮されていない実行データを圧縮する。この実施例では、コンピュータ・システムは、最も古くく(least recently)実行されたスレッドから最も新しく実行されたスレッドの順に現在実行不能であるスレッドのそれらをリストする最も古く(least recently)実行されたリストを更に備えうる。スレッドの圧縮可能なものは、ラン−タイム・メモリの空間が必要であるが利用可能でないときに圧縮されていない実行データを有する最も古く実行されたリストの最も古く実行されたスレッドである。
【００１８】
更なる実施例では、コンピュータ・システムは、また、二次メモリを備えている。この実施例では、データ・コンプレッサは、ラン−タイム・メモリの空間が必要であるが利用可能でないときに実行不能であるスレッドの記憶可能なものの圧縮された実行データまたはその一部分を二次メモリに記憶する。データ・コンプレッサは、次いで、その圧縮された実行データがラン−タイム・メモリで圧縮解除されるべきであるスレッドの検索可能なものの圧縮された実行データまたはその一部分を二次メモリから検索する。
本発明の更なる目標及び特徴は、図面と一緒に以下の詳細な説明及び特許請求の範囲から容易に明らかであろう。
【００１９】
【実施例】
図１を参照すると、本発明によるコンピュータ・ネットワーク１００が示されている。それは、一つ以上のクライアント・コンピュータ・システム１０２、一つ以上のサーバ・コンピュータ・システム１０４、及びネットワーク通信接続１０６を含む。
クライアント・コンピュータ・システム１０２は、ネットワーク通信接続１０６を介してサーバ・コンピュータ・システム１０４に接続されている。ネットワーク通信接続は、ローカルまたはワイド・エリア・ネットワーク、インターネット、またはある他の型のネットワーク通信接続でありうる。
各サーバ・コンピュータ・システム１０４は、中央処理装置（ＣＰＵ）１１０、ユーザ・インターフェイス１１２、ネットワーク通信インターフェイス１１６、及びメモリ１１８を含む。ネットワーク通信インターフェイスは、各サーバ・コンピュータ・システムがネットワーク通信接続１０６を介してクライアント・コンピュータ・システム１０２と通信できるようにする。
【００２０】
各サーバ・コンピュータ・システム１０４のメモリ１１８は、オペレーティング・システム１２０、ネットワーク通信マネージャ（またはサーバ）１２２、及びマルチ・スレッド・プログラム（即ち、メソッド）１４７及び／又は１４８を記憶する。オペレーティング・システム及び通信マネージャは、全てＣＰＵ１２０で走る。オペレーティング・システムは、ユーザ・インターフェイス１１２でユーザによって発行されたかまたはクライアント・コンピュータ・システム１０２のユーザからネットワーク通信接続１０６を介してネットワーク通信インターフェイス１１６によって受信されたコマンドに応じてネットワーク通信マネージャの走行を制御しかつコーディネートする。
各サーバ・コンピュータ・システム１０４のプログラム１４７は、クライアント・コンピュータ・システム１０２の特定のアーキテクチャ（即ち、プラットフォーム）に独立であるアーキテクチャ・ニュートラル（ＡＮ）コードを含む。これらのプログラムは、特定のプログラミング言語からＡＮコードにコンパイルされる。好ましい実施例では、これらのプログラムは、Ｊａｖａプログラミング言語で書かれかつＪａｖａバイトコードにコンパイルされる。更に、これらのプログラムは、オブジェクト指向型方法でプログラムされたソフトウェア・アプリケーションを形成するオブジェクト・クラスに含まれる。
【００２１】
プログラム１４７とは異なり、各サーバ・コンピュータ・システムのプログラム１４８は、クライアント・コンピュータ・システム１０２の特定アーキテクチャに対するアーキテクチャ特定（ＡＳ）コードにコンパイルされる。後で詳述するように、ネットワーク１００が、これらのプログラムが高度の信頼請求性でクライアント・コンピュータ１０２へ確実に送られうるようなクローズされ(closed)かつトラストされた(trusted) ネットワークであるかまたはこれらのプログラムが確認することができるディジタル署名を組み込んでいることが好ましい。
後で詳述するように、プログラム１４７及び／又は１４８は、ネットワーク通信マネージャ１２２を用いてクライアント・コンピュータ・システム１０２へのユーザ要求により伝送される。それゆえに、これらのプログラムのコードは、ネットワーク移動コードと考えられる。
【００２２】
各クライアント・コンピュータ・システム１０２は、ビデオ・ゲーム、パーソナル・ディジタル・アシスタント（ＰＤＡ）、セルラー電話機、デスクトップ・コンピュータ、または他のコンピュータ・システムまたは少量のラン−タイム・メモリを必要とするコンピュータ動作型デバイスでありうる。更に、各クライアント・コンピュータ・システムは、中央処理装置（ＣＰＵ）１２６、ユーザ・インターフェイス１２８、ネットワーク通信インターフェイス１３２、読み取り専用メモリ（ＲＯＭ）１３４、及びラン−タイム・ランダム・アクセス・メモリ（ＲＡＭ）１３６を含む。ネットワーク通信インターフェイスは、クライアント・コンピュータ・システムがネットワーク通信接続１０６を介してサーバ・コンピュータ・システム１０４と通信できるようにする。
【００２３】
各クライアント・コンピュータ・システム１０２のＲＡＭ１３６は、ＲＯＭ１３４から全てロードされたデータ・コンプレッサ１４６、仮想マシン・モジュール１４２、ネットワーク通信マネージャ１４０、オペレーティング・システム１３８を記憶する。ＲＡＭは、また、サーバ・コンピュータ１０４からダウンロードされたアーキテクチャ特定（ＡＳ）コードのプログラム１４８及びＡＮコードのプログラム１４７を記憶する。オペレーティング・システム、ネットワーク通信マネージャ、仮想マシン・モジュール、データ・コンプレッサ、及びプログラムは、全てＣＰＵ１２６で実行される。オペレーティング・システムは、ユーザ・インターフェイス１２８でユーザによって発行されたコマンドに応じてネットワーク通信マネージャ、仮想マシン・モジュール、データ・コンプレッサ、及びプログラムの実行を制御しかつコーディネートする。
【００２４】
先に示したように、プログラム１４７及び／又は１４８は、ユーザ要求によりサーバ・コンピュータ・システム１０４から受信される。これらのプログラムは、好ましい実施例では、HotJava ネットワーク通信マネージャである、ネットワーク通信マネージャ１４０を用いて取得される。ネットワーク通信マネージャは、次いで、ＲＡＭ１３６にこれらのプログラムをロードする。
ＡＮコードでロードされたプログラム１４７の場合には、仮想マシン・モジュール１４２のコード・ベリファイヤ１５１は、次いで、ロードされたプログラムのＡＮコードが所定の完全性基準に一致することを確認する。先に示したように、これは、ロードされたプログラムが仮想マシン・モジュールのスタックをオーバーフローまたはアンダーフローすることができないしかつ全てのプログラム命令がそのデータ型がそれらのプログラム命令に対するデータ型制限に一致するデータだけを利用するということを確実にすべくスタック及びデータ型使用制限を含みうる。
【００２５】
しかしながら、ＡＳコードでロードされたプログラム１４８の場合には、コード・ベリファイヤ１５１は、それらの完全性を直接確認するために用いることができない。それゆえに、それらの完全性を間接的に確認するために、ネットワーク１００は、これらのプログラムが高度な信頼性でクライアント・コンピュータ１０２へ確実に送られうるようなクローズされかつトラストされたネットワークでありうる。代替的に、ネットワーク１００が安全（確実）でないならば、これらのプログラムは、ネットワーク通信マネージャ１４０がそれらがトラストされた資源からであるということを確認できるようにするディジタル署名を組み込みうる。
仮想マシン・モジュール１４２の実行コントローラ１５３は、それらがロードされたときにプログラム１４７及び／又は１４８の実行を制御する。特に、実行コントローラは、クライアント・コンピュータ・システム１０２の特定アーキテクチャでの実行に対してプログラム１４７のＡＮコードを変換（翻訳）しかつこれらのプログラムが特定のアーキテクチャで実行されるべきＡＳコードを有するプログラム１４８を呼出すことができるようにする。更に、ネットワーク通信マネージャ１４０、及び／又はデータ・コンプレッサ１４６は、それら自身がＡＮコードにコンパイルされるならば、実行コントローラは、それらの実行も制御する。
【００２６】
ちょうどロードされたプログラム１４７及び／又は１４８は、マルチ・スレッドされるので、実行コントローラ１５３は、これらのプログラムに対する実行のスレッドを生成する。これらのスレッドの実行は、他のロードされたプログラム１４７及び／又は１４８のスレッドと一緒に、実行コントローラによって制御される。
仮想マシン・モジュール１４２は、クライアント・コンピュータ・システム１０２の特定アーキテクチャに対してＡＳコードにコンパイルされる。仮想マシン・モジュールは、Ｃ言語で書かれかつＡＳコードにコンパイルされたＪａｖａ仮想マシン・モジュールでありうる。
更に、クライアント・コンピュータ・システム１０２のＲＡＭ空間要求をローに保つために、データ・コンプレッサ１４６は、それらの実行中に種々の時間でスレッドの実行データをＲＡＭ１３６で圧縮及び圧縮解除する。各スレッドの実行データは、それが圧縮されないときにＲＡＭの圧縮されていないデータ・リポジトリ１５８に記憶されかつそれが圧縮されるときにＲＡＭの圧縮されたデータ・リポジトリ１５７に記憶される。スレッドの実行及び記憶状態は、スレッド実行及び記憶状態データ構造１５５に維持される。スレッドの実行データは、それらがＲＡＭ１３６に記憶される所定の圧縮及び圧縮解除基準１５２及び１５４を満たすのでそれぞれ圧縮可能及び圧縮解除可能であるスレッドに対して圧縮及び圧縮解除される。本発明のある実施例では、後でより完全に説明する、圧縮及び圧縮解除基準は、一組の所定のメモリ・マネージメント戦略から（ユーザ・インターフェイス１２８を用いて）ユーザ選択可能及び／又は調整可能である。
【００２７】
好ましい実施例では、所定の圧縮基準１５２は、圧縮可能スレッドの実行データが（１）ＲＡＭ１３６の空間が必要であるが利用可能でなく、かつ（２）圧縮可能スレッドが、その実行データがまだ圧縮されていないスレッドの最も古く実行されたときに圧縮されることを特定する。また、好ましい実施例では、圧縮解除可能なスレッドの実行データを圧縮解除するための所定の圧縮解除基準１５４は、圧縮解除可能なスレッドの実行データが圧縮されかつ圧縮解除可能なスレッドが実行可能になったときに圧縮解除されるべきであることを単に特定する。
図２を参照すると、スレッド２００のそれぞれは、ＡＳコード（ＡＳＣ）スタック及びＡＣコード（ＡＮＣ）スタックで実行コントローラ１５３によってインプリメントされる。特定的に、実行コントローラは、それがスレッドの実行を制御できるようにそのＡＳコードを実行するための実行データをＡＳＣスタックに記憶する。同様に、実行コントローラは、スレッドのＡＮＣコード及びＡＮコードによって呼出されたあらゆるＡＳコードを実行するための実行データをＡＮＣスタックに記憶する。仮想マシン・モジュール１４２がＣ言語で書かれかつＡＳコードにコンパイルされる場合には、ＡＳＣスタックは、Ｃ言語で書かれたプログラムのインプリメンテーションで一般的に行われるような、固定サイズの連続性スタック（例えば、１２８Ｋ）でありうる。更に、プログラム１４７がJavaバイトコードにコンパイルされる場合には、ＡＮＣスタックは、ＲＡＭ空間要求により拡張及び収縮される（例えば、少なくとも４Ｋでかつ４Ｋインクリメントで増大または減少される）可変サイズ非連続性Javaスタックである。
【００２８】
スレッド２００のそれぞれのＡＳＣ及びＡＮＣスタックを生成するために、圧縮されていないデータ・リポジトリ１５８は、ＡＳＣメモリ・エリア２０４のプール２０２及びＡＮＣメモリ・エリア２０８のプール２０６を含む。更に、スレッド記憶状態データ構造１５５は、スレッド記憶状態テーブル２１０、ＡＳＣメモリ・エリア２０４のフリー・リスト、及びＡＮＣメモリ・エリア２０８のフリー・リスト２１４を含む。フリー・リストは、利用可能である（即ち、フリー）ＡＳＣ及びＡＮＣメモリ・エリアのそれら及び利用可能メモリ・エリアへの対応ポインタをそれぞれリストする。
図３は、先に説明した好ましい圧縮及び圧縮解除基準１５２及び１５４による本発明の圧縮及び圧縮解除方法３００のフローチャートを示す。図２及び図３を参照すると、スレッド２００の一つが実行コントローラ１５３によって生成されるとき（図３のステップ３０２）、それは、スレッドをインプリメントすべく圧縮されていないデータ・リポジトリ１５８に利用可能なメモリ空間が存在するかどうかを決定する（図３のステップ３０４）。これは、利用可能なＡＳＣメモリ・エリア２０４及び利用可能なＡＮＣメモリ・エリア２０８が存在するかどうかをフリー・リスト２１２及び２１４から決定することによって行われる。
【００２９】
メモリ空間が利用可能であれば、実行コントローラ１５３は、メモリ空間を割り当てかつ圧縮されていない実行データが生成されるときにスレッド２００をインプリメントすべく圧縮されていない実行データをそれに記憶する（図３のステップ３０６）。換言すると、ＡＳＣメモリ・エリア２０４及びＡＮＣメモリ・エリア２０８の両方が利用可能であれば、実行コントローラは、スレッドのＡＳＣ及びＡＮＣスタックとして利用可能なＡＳＣ及びＡＮＣメモリ・エリアを割り当てかつスレッドの圧縮されていない実行データをそれらに記憶する。そのようにして、実行コントローラは、スレッド、ＡＳＣスタックを形成する割り当てられたＡＳＣメモリ・エリア、及びＡＮＣスタックを形成する割り当てられたＡＮＣメモリ・エリアを識別すべくスレッド記憶状態テーブル２１０を更新する。更に、実行コントローラは、ＡＳＣ及びＡＮＣスタックの底部へのポインタとしてそれぞれサーブするＡＳＣ及びＡＮＣメモリ・エリアへのポインタを識別すべくスレッド記憶状態テーブルを更新する。割り当てられたＡＳＣ及びＡＮＣメモリ・エリアは、従って一緒に、スレッドのメモリ空間を供給する。実行コントローラは、また、スレッドのメモリ空間の実行データが圧縮されていない（Ｕ）ことを示すべくスレッド記憶状態テーブルを更新しかつ対応フリー・リストから割り当てられたＡＳＣ及びＡＮＣメモリ・エリアを除去する。
【００３０】
スレッド２００のそれぞれは、種々の時間で実行可能（即ち、使用可能または走行可能）及び実行不能でありうる。それが眠らされ、データを待ち、計画解除される、等であるので、スレッドは、現在実行可能ではないであろう。スレッド状態データ構造１５５は、現在実行可能ではない各スレッドをリストするＬＲＥリスト２１６を含む。ＬＲＥは、最も古く実行されたものから最も新しく実行されら順にスレッドをリストする。
しかしながら、圧縮されていないデータ・リポジトリ１２０のメモリ空間がスレッド２００をインプリメントすべく利用可能でないならば、実行コントローラ１５３は、データ・コンプレッサ１４６を呼出す。データ・コンプレッサは、ＬＲＥリストにリストされた最も古く実行されたスレッドの実行データを圧縮しかつ圧縮されたデータ・リポジトリ１５７にそれを配置する（図３のステップ３０８）。特定的に、スレッドに割り当てられたようにスレッド記憶状態テーブル２１０で識別されたＡＳＣ及びＡＮＣメモリ・エリアの圧縮された実行データは、圧縮されたデータ・リポジトリ１５７の対応している圧縮されたデータ（ＣＤ）メモリ・エリア２１８に配置される。データ・コンプレッサは、また、スレッドのＡＳＣ及びＡＮＣスタックを形成する対応しているＣＤメモリ・エリアを識別すべくスレッド記憶状態テーブル、及びＣＤメモリ・エリアの圧縮された実行データのエンドへの対応しているポインタを更新する。それは、また、スレッドのメモリ空間が圧縮されている（Ｃ）ことを示すためにスレッド記憶状態テーブルを更新する。データ・コンプレッサ１４６は、当業者に周知のあらゆる高速データ圧縮技術を用いうる。
【００３１】
生成されたスレッド２００が実行可能であると同時に、実行コントローラ１５３は、実行中に生成される圧縮されていない実行データを適切なときにＡＳＣ及びＡＮＣスタックに配置しかつＡＳＣ及びＡＮＣスタックから除去する。そのようにして、実行コントローラは、ＡＳＣ及びＡＮＣスタックの頂部へのポインタをそれぞれ更新する。
更に、これが発生している間に（図３のステップ３１０）、実行コントローラ１５３は、生成されたスレッドにメモリ空間を割り当てるための先に記述されたものと同じ方法で実行中にスレッドがさらなるメモリ空間を必要とするときに（図３のステップ３１２）スレッドのメモリ空間のサイズを増大する（ステップ３０４〜３０８）。特定的に、スレッドがアーキテクチャ・ニュートラル言語でスレッドを走らせるための実行データを記憶すべくさらなるメモリ空間を必要とする度毎に、ＡＮＣスタックのサイズは、それに圧縮されていないデータ・リポジトリ１２０の別の部分を割り当てることによって増大されなければならない。これにより、実行コントローラは、ＡＮＣスタックの一部であるとして割り当てられたＡＮＣメモリ・エリアを識別し、割り当てられたＡＮＣメモリ・エリアへのポインタを識別し、かつＡＮＣスタックの頂部へのポインタとしてサーブする割り当てられたＡＮＣメモリ・エリアの実行データのエンドへのポインタを識別すべくスレッド記憶状態テーブル２１０を更新することによってフリー・リスト２１２にリストされた別のＡＮＣメモリ・エリア２０８をスレッドに割り当てる。更に、実行コントローラは、フリー・リストから割り当てられたＡＮＣメモリ・エリアを除去する（または利用可能ＡＮＣメモリ・エリアの部分がスレッドに割り当てられたならばそのサイズを減少する）。
【００３２】
同様に、スレッド２００が実行可能である間に（図３のステップ３１０）、それがもはやそのメモリ空間の部分を必要としない度毎に、（図３のステップ３１４）、スレッドのメモリ空間は、それが必要としない部分を割り当て解除することによって減少される（図３のステップ３１６）。特定的に、ＡＮＣスタックのサイズは、それよりも少ないものがその実行中にスレッドによって要求されるときにはいつでも減少される。例えば、メモリが４Ｋバイト・ブロックに割り当てられており、スレッドによって用いられるＡＮＣスタックの部分が、４Ｋバイト・ブロックの割り当て解除を許容すべく十分に減少されるとき（即ち、ＡＮＣスタックへの頂部へのポインタがＡＮＣスタックの先行する４Ｋブロックにおける位置をポイントする）、ＡＮＣのサイズは、一つの４Ｋバイト・ブロックによって減少される。これは、もはや必要でないＡＮＣスタックのＡＮＣメモリ・エリア２０８を割り当て解除することによって行われる。このＡＮＣメモリ・エリアを割り当て解除することで、実行コントローラは、ＡＮＣメモリ・エリアがそれから除去されかつＡＮＣスタックの一部であるとしてもはや識別されないようにスレッド記憶状態テーブル２１０を更新する。
【００３３】
スレッド２００が実行不能になるとき（図３のステップ３１０）、実行コントローラ１５３は、ＬＲＥリスト２１６のエンドにそれを加える（図３のステップ３１８）。このスレッドがまだ実行不能である間（図３のステップ３２０）、実行コントローラは、そのメモリ空間のあるものが別のスレッドによって供給されるかどうかを決定する（図３のステップ３２２）。これは、先に記述したように、他方のスレッドが生成されるか（図３のステップ３０２）またはさらなるメモリ空間を必要とする（図３のステップ３１２）し、他のスレッドに利用可能な圧縮されていないデータ・リポジトリ１２０十分なメモリ空間が存在しないときに、発生し、かつそのメモリ空間が必要とされるスレッドは、その実行データがまだ圧縮されていないＬＲＥリスト２１６の最も古く実行されたスレッドである。
【００３４】
メモリ空間が別のスレッドによって必要であれば、そのメモリ空間が必要であるスレッド２００の実行データは、先に説明した方法で（図３のステップ３０８）データ・コンプレッサによって圧縮される（図３のステップ３２４）。この処理（図３のステップ３２０〜３２４）は、スレッドが再び実行可能になるまで繰り返される（図３のステップ３２０）。
スレッド２００が再び実行可能になるとき、実行コントローラ１５３は、スレッドの実行データが圧縮されたかどうかを決定する（図３のステップ３２６）。それが圧縮されていないならば、実行コントローラは、ＬＲＥリスト２１６からスレッドを除去する（図３のステップ３２８）。その結果、スレッドの実行データは、スレッドが再び実行不能になるまで圧縮されず（図３のステップ３１０）、スレッドは、ＬＲＥリストに加えられ（図３のステップ３１８）、かつスレッドのメモリ空間は、別のスレッドによって必要とされる（図３のステップ３２２）。
【００３５】
しかしながら、スレッド２００が再び実行可能になるがその実行データが圧縮されているとき、実行コントローラ１５３は、スレッドの実行データを圧縮解除すべくメモリ空間が圧縮されていないデータ・リポジトリ１２０において利用可能かどうかを決定する（図３のステップ３３０）。これは、生成されたスレッドに対して先に説明したものと類似する方法で行われる（図３のステップ３０４）。
スレッド２００の実行データを圧縮解除するために利用可能なメモリ空間が不十分であるならば、ＬＲＥリスト２１６の一つ以上の最も古く実行されたスレッドの実行データは、メモリ空間を利用可能にすべく圧縮される。これは、先に記述したものと類似する方法で行われる（図３のステップ３０８）。
【００３６】
十分なメモリ空間が既に利用可能であるかまたは一つ以上の他のスレッドの実行データを圧縮することによって十分なメモリ空間が利用可能になっているときに、実行コントローラ１５３は、スレッド２００の実行データを圧縮解除するために必要なメモリ空間を割り当てる（図３のステップ３３４）。これは、ＡＳＣ及びＡＮＣメモリ・エリア２０４及び２０８がスレッドのＡＳＣ及びＡＮＣスタックを形成すべく割り当てられるように、生成されたスレッドに対して先に記述したもの（図３のステップ３０６）と類似する方法で行われる。
スレッド２００の実行データは、データ・コンプレッサ１４６によって圧縮解除されかつ利用可能なメモリ空間に配置される（図３のステップ３３６）。特定的に、スレッドに割り当てられているようにスレッド記憶状態テーブル２１０で識別されたＣＤメモリ・エリア２１８の実行データは、圧縮解除されかつ実行コントローラ１５３によって割り当てられた対応しているＡＳＣ及びＡＮＣメモリ・エリア２０４及び２０８に配置される。このように、データ・コンプレッサは、スレッドのＡＳＣ及びＡＮＣスタックを形成する対応しているＡＳＣ及びＡＮＣメモリ・エリアへのポインタ及びＡＳＣ及びＡＮＣスタックの頂部へのポインタを識別すべくプログラム記憶状態テーブル２１０を更新する。先に示したように、スレッドの実行データは、スレッドが再び実行不能になるまで再び圧縮されず（図３のステップ３１０）、スレッドは、ＬＲＥリスト２１６に加えられ（図３のステップ３１８）、かつスレッドのメモリ空間は、別のスレッドによって必要である（図３のステップ３２２）。
【００３７】
上記の観点から、本発明は、スレッドの実行のためのラン−タイム・メモリ空間における低減を供給するということが明らかである。しかしながら、当業者が認識するように、他の代替実施例は、同様な利益を供給すべくインプリメントすることができる。
特定的に、先に説明した圧縮基準１５２は、圧縮されていない実行データを有する最も古く実行されたスレッド２００がＲＡＭ１３６の空間が必要であるが利用可能でないときに圧縮されるであろうということを特定した。しかしながら、圧縮基準は、広範囲のオプションからかつユーザのクライアント・コンピュータ・システム１０２に特定な多数の条件に基づいてユーザによって選択される。例えば、圧縮基準は、スレッドのそれぞれの実行データがスレッドが実行不能になったならば圧縮されるということを単に特定しうる。また、ある一定のスレッドの実行データは、そのようにするために時間が利用可能であるときにはいつでもものうげに(lazily)圧縮されるというこが特定されうる。そして、先のいずれかのさらなる変形として、圧縮基準は、特定サイズまたは型のスレッドの実行データだけが圧縮されるということを特定しうる。
【００３８】
更に、先に示したように、圧縮解除基準１５４は、圧縮された実行データを有するスレッド２００がスレッドが再び実行可能になったならばその実行データをデータ・コンプレッサ１４６によって圧縮解除させたということを特定した。しかしながら、圧縮解除基準は、圧縮された実行データが所定の時間間隔が満了した後で圧縮解除されるということを特定することができる。この場合には、データ・コンプレッサは、時間間隔を計時するためにタイマを含むであろう。一例では、この技術は、スレッドの実行データがこの時間間隔に対して圧縮されそしてスレッドが目覚めさせられるちょっと前に圧縮解除されるように決められた時間間隔に対して眠らされるスレッドに対して用いることができる。または、別の例では、技術は、その間にスレッドの実行データが圧縮される時間間隔が、待っていたデータがスレッドに対して利用可能になるときを予測するように選択されるところのデータを待っているスレッドに対して用いることができる。
【００３９】
更に、当業者が認識するように、圧縮基準１５２は、圧縮されるべき実行データが実行不能スレッド２００の全実行データまたは単にそのフラグメントまたは部分でありうるということを特定しうる。この場合には、圧縮される実行データの量は、別のスレッドによって要求されたメモリ空間に基づきうる。それゆえに、例えば、別のスレッドがＡＮＣメモリ・エリア２０８を必要とし、かつそれ以上のＡＮＣメモリ・エリアが利用可能でないならば、実行不能なスレッドの必要なＡＮＣメモリ・エリアの実行データだけがこのＡＮＣメモリ・エリアを利用可能にすべく圧縮されうる。
更に別の実施例では、ＡＮＣメモリ・エリア２０８のそれぞれは、それがスレッドの実行データを現在記憶していないけれども、対応しているスレッド２００のＡＮＣスタックの一部として常に割り当てられる。それゆえに、スレッドに割り当てられるＡＮＣメモリ・エリアの一つが実行データを記憶するためにそのスレッドによってもはや必要とされないとき、実行コントローラ１５３は、スレッドに割り当てられたＡＮＣメモリ・エリアをまだ残す。これは、スレッドがその実行において後で別のＡＮＣメモリ・エリアを再び要求することがかなり確実なので、行われる。このスレッドに割り当てられたＡＮＣメモリ・エリアを保つことで、実行コントローラは、（ＡＮＣスタックの別のＡＮＣメモリ・エリアにある）ＡＮＣスタックの頂部へのポインタを識別すべくスレッド記憶状態テーブル２１０を更新する。このように、利用可能なＡＮＣメモリ・エリアの仮想フリー・リストは、利用可能なＡＮＣメモリ・エリアの全てがスレッドに割り当てられるが実行データを含んでいないところで生成される。次いで、スレッドが別のＡＮＣメモリ・エリアを必要とするとき、実行コントローラは、先に説明したものと同じ方法でこの他のスレッドに実行データを記憶しない利用可能なＡＮＣメモリ・エリアの一つを再び割り当てる。
【００４０】
更に、図４及び図５を参照すると、二次メモリ４００は、それらが二次記憶基準を満たすので記憶可能であるスレッド２００の圧縮された実行データを記憶するために用いることができる。この場合には、二次記憶基準は、先に説明した圧縮基準１５２に含まれかつ圧縮された実行データまたはその部分がそれが圧縮されたときに二次メモリに記憶されるべきであるということを特定することができるかまたはそれがメモリ空間が必要であるときにだけ二次メモリに記憶されるべきであるということを特定することができる。いずれの場合でも、データ・コンプレッサ１４６は、ＣＤメモリ・エリア２１８に記憶された圧縮されたデータを動かしかつ二次メモリ４００の対応しているＣＤメモリ・エリア５００に記憶する。また、データ・コンプレッサは、二次メモリの実行データをポイントすべくプログラム記憶状態テーブル２１０のポインタを更新する。更に、それらの実行データまたはその部分が圧縮されるので検索可能であり、二次メモリに記憶され、かつ圧縮解除されるべきであるスレッドに対し、実行データは、二次メモリから検索されそして先に説明した方法でＲＡＭ１３６で圧縮解除される。
【００４１】
更に、クライアント・コンピュータ・システム１０２が二次メモリ４００（例えば、ネットワーク・デスクトップ・コンピュータ）を含むような実施例では、プログラム１４７及び／又は１４８は、サーバ・コンピュータ・システム１０４から二次メモリへダウンロードすることができる。そして、これらのプログラムは、サーバ・コンピュータ・システム１０４からではなく、二次メモリからＲＡＭ１３６へ直接的に仮想マシン・モジュール１４２によってロードすることができる。更に、そのような実施例では、オペレーティング・システム１３８、ネットワーク通信マネージャ１４０、仮想マシン・モジュール１４２、及びデータ・コンプレッサ１４６は、二次メモリに記憶しかつそれからＲＡＭにロードすることができる。
【００４２】
更に別の実施例では、オペレーティング・システム１３８、ネットワーク通信マネージャ１４０、仮想マシン・モジュール１４２、及びデータ・コンプレッサ１４６は、サーバ・コンピュータ・システム１０４の一つからクライアント・コンピュータ・システム１０２のＲＡＭ１３６へダウン・ロードすることができる。これは、サーバ・コンピュータ・システムのプログラム１４７及び／又は１４８に対して先に説明したものと同様な方法で行われるであろう。
さらに別の実施例では、仮想マシン・モジュール１４２は、シリコン・チップで実際にインプリメントされかつクライアント・コンピュータ・システム１０２のＣＰＵ１２６としてサーブする。この場合には、ＡＮコードを有するプログラム１４７は、特定のアーキテクチャに対して変換（翻訳）されずその代わり直接的に実行される。この実施例では、ＡＳコードを有するプログラム１４８は、利用されない。
【００４３】
そして、本発明は、数個の特定な実施例を参照して記述されたが、記述は、本発明の説明のためであり本発明を制限することを意図しない。特許請求の範囲によって定義されたような本発明の真の精神及び範疇から逸脱することなく種々の変更が当業者に生じるであろう。
【００４４】
【発明の効果】
本発明のコンピュータ・システムは、低減されたラン−タイム空間要求を有する実行の複数のスレッドを実行するコンピュータ・システムであって、ラン−タイム・メモリ；（Ａ）スレッドを実行し、それによりスレッドが異なる時間で実行可能及び実行不能であり、かつ（Ｂ）実行データが生成されるときにスレッドの実行データをラン−タイム・メモリの利用可能空間に圧縮しないで記憶する実行コントローラ；及び（Ａ）実行不能であるスレッドの圧縮可能なものの圧縮されていない実行データまたはその部分をラン−タイムメモリで圧縮し、それにより空間がラン−タイム・メモリにおいて利用可能になり、かつ（Ｂ）スレッドの圧縮解除可能なものが実行可能になった後で実行されうるようにスレッドの圧縮解除可能なものの圧縮された実行データをラン−タイム・メモリの利用可能空間に圧縮解除するデータ・コンプレッサを備えているので、記憶要求を低減するために各スレッドの平均ラン−タイム記憶費用を低減することができる。
【００４５】
本発明の方法は、低減されたラン−タイム・メモリ空間要求を有する実行の複数のスレッドを実行する方法であって、ラン−タイム・メモリを供給し；スレッドを実行し、それによりスレッドが異なる時間で実行可能及び実行不能であり；実行データが生成されたときにスレッドの実行データをラン−タイム・メモリの利用可能な空間に圧縮しないで記憶し；実行不能であるスレッドの圧縮可能なものの圧縮されていない実行データまたはその部分を圧縮し、それにより空間がラン−タイム・メモリで利用可能になり；かつスレッドの圧縮解除可能なものが実行可能になった後に実行されうるようにスレッドの圧縮解除可能なものの圧縮された実行データをラン−タイム・メモリの利用可能な空間に圧縮解除する段階を具備するので、記憶要求を低減するために各スレッドの平均ラン−タイム記憶費用を低減することができる。
【図面の簡単な説明】
【図１】本発明を組み込んでいるコンピュータ・ネットワークのブロック図である。
【図２】コンピュータ・ネットワークにおけるクライアント・コンピュータ・システムの動作の機能ブロック図である。
【図３】クライアント・コンピュータ・システムの動作のフローチャートである。
【図４】本発明が組み込まれているコンピュータ・ネットワークの代替実施例のブロック図である。
【図５】コンピュータ・ネットワークの代替実施例におけるクライアント・コンピュータ・システムの動作の機能ブロック図である。
【符号の説明】
１００  コンピュータ・ネットワーク
１０２  クライアント・コンピュータ・システム
１０４  サーバ・コンピュータ・システム
１０６  ネットワーク通信接続
１１０、１２６  中央処理装置（ＣＰＵ）
１１２、１２８  ユーザ・インターフェイス
１１６  通信インターフェイス
１１８  メモリ
１２０、１３８  オペレーティング・システム
１２２、１４０  ネットワーク通信マネージャ
１２４、１４７  プログラムズ：ＡＮコード
１２５、１４８  プログラムズ：ＡＳコード
１３２  ネットワーク通信インターフェイス
１３４  ＲＯＭ
１３６  ＲＡＭ
１４２  仮想マシン・モジュール
１４６  データ・コンプレッサ
１５１  コード・ベリファイヤ
１５２、１５４  基準
１５３  実行コントローラ
１５５  スレッド状態データ構造
１５７  圧縮されたデータ・リポジトリ
１５８  圧縮されていないデータ・リポジトリ
【図１】
0003863967.tif 000002
【図２】
0003863967.tif 000003
【図３】
0003863967.tif 000004
【図４】
0003863967.tif 000005
【図５】
0003863967.tif 000006