JP5236367B2 - 共用型ジャバjarファイル - Google Patents

共用型ジャバjarファイル Download PDF

Info

Publication number
JP5236367B2
JP5236367B2 JP2008173812A JP2008173812A JP5236367B2 JP 5236367 B2 JP5236367 B2 JP 5236367B2 JP 2008173812 A JP2008173812 A JP 2008173812A JP 2008173812 A JP2008173812 A JP 2008173812A JP 5236367 B2 JP5236367 B2 JP 5236367B2
Authority
JP
Japan
Prior art keywords
data
memory area
area
virtual
private memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008173812A
Other languages
English (en)
Other versions
JP2009059349A (ja
JP2009059349A5 (ja
Inventor
ランダウ エレツ
アール.イー. ロング ディーン
フレスコ ネディム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2009059349A publication Critical patent/JP2009059349A/ja
Publication of JP2009059349A5 publication Critical patent/JP2009059349A5/ja
Application granted granted Critical
Publication of JP5236367B2 publication Critical patent/JP5236367B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44557Code layout in executable memory
    • G06F9/44563Sharing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、複数の同時的に実行する孤立したJVMプロセス間でジャバファイルを共用する技術に関するものであって、更に詳細には、複数個の同時的に実行する孤立したJVMプロセスの間でジャバJARファイルを共用する方法、システム及びプログラムを記録した機械読取可能な媒体に関するものである。
複数のジャバ(JAVA)バーチャルマシン(JVM)は同一のコンピューティング装置上で同時的に実行する場合がある。このような各JVMは、同一のコンピューティング装置上で同時的に実行するその他のJVMプロセスから孤立している別個のプロセス(ここでは「JVMプロセス」と呼称する)内において実行する場合がある。これらのJVMプロセスの各々は、コンピューティング装置のメモリのかなりの量を消費する場合がある。各JVMプロセスが消費するメモリの量は、コンピューティング装置上で同時的に実行させることが可能なJVMプロセスの数を制限する場合がある。
JVMプロセスは、そのJVMプロセスがスタートアップ即ち開始する場合にあるクラスをロードすることを必要とする。これらのクラスのローディングはかなりの量の時間を必要とする場合がある。複数個のJVMプログラムが同時的に実行されるべき場合には、これらJVMプロセスの全てがこのようなクラスをロードするのに必要とされる時間の量は法外なものとなる場合がある。
通常、JVMプロセスが開始する場合には、そのJVMプロセスは参照と関連しているクラスをロードすることを必要とする。その参照は、例えば、「java.lang.String」のような記号的名称である場合がある。そのJVMプロセスはルックアッププロセスを実施し、そのことはクラスローダーを関与させる。クラスローダーは、ファイルシステムから、そのクラスに対応するバイトをロードさせる。クラスローダーはそのクラスを定義する。JVMプロセスはこれらのバイトを処理し且つ高速アクセスのためにこれらのバイトをJVMプロセスの内部データ構造(例えば、ルックアップテーブル)内へロードさせる。
これらのデータ構造は、典型的に、JVMプロセスのプライベートヒープ(即ち、プライベートメモリ領域)内に割当てられているメモリ内に格納される。JVMプロセスは、例えば、「malloc」コールを使用してこのメモリの割当てを行うことが可能である。このメモリ領域は共用されることのない書込可能なプライベートメモリである。
本発明は、以上の点に鑑みなされたものであって、上述した如き従来技術の欠点を解消し、孤立したバーチャルマシン間でプログラムモジュールを共有するための改良した技術を提供することを目的とする。
ここに記載する技術を使用して、複数の独立し孤立したJVMプロセス(集合的に考える)が繰り返し実施し且つこれらのタスクを繰り返し実施する代わりにこれらのタスクを正確に一度だけ実施し且つJVMプロセス間においてこれらのタスクを実施した結果を共用することによりメモリを節約することが可能である。本発明の1実施例においては、JVMプロセスの全てが、そうでなければ、ジャバJARファイル等のプログラムモジュールから独立的にロードするようなクラスが、その代わりに、JVMプロセスのうちの1つによってJVMプロセスの全てがアクセスすることが可能な共用されるメモリ内に一度だけロードされる。これらのクラスが共用されるメモリ内にロードされると、複数の同時的に実行する孤立したJVMプロセスはこれらのクラスを共用することが可能である。
図1は本発明の1実施例に基づいて複数の同時的に実行する孤立したJVMプロセス間においてジャバ(JAVA(登録商標))JARファイルを共用するためのシステムの論理的コンポーネント及び側面を例示するブロック図である。本発明の1実施例においては、コンピューティング装置のメモリが別個の領域に分離される。1つのこのような領域は「共用可能な領域」102である。共用可能な領域102は、又、「ライトワンス(write once)」領域と呼ばれる。共用可能な領域102は、マスターJVMプロセス104が初期化している期間中に「マスター」JVMプロセス104によって書込可能である。然しながら、その後にスタートアップ即ち開始するその他のJVMプロセス106は共用可能な領域102から単に読取るのみでありそれに対して書込を行うことはない。これらのその他のJVMプロセス106は、例えば、「リードオンリ(read−only)」モードにおいて共用可能な領域102に対してマッピングすることが可能である。更に、各JVMプロセス104及び106はそれ自身の別個のプライベートな「リード/ライト(read/write)」領域(108及び110)を有しており、その中にそのJVMプロセスのみが書込むことが可能であり且つそれからそのJVMプロセスのみが読取ることが可能である。例えば、各JVMプロセスのプライベートなリード/ライト領域は、プログラム空間の一部としてビルド時に予め割当てられている別個の静的配列として実現することが可能である。UNIX(登録商標)「mmap」又はリード・ライト領域108及び110を割当てるために同様のオペレーティングシステム要求を使用することは別の可能性である。
本発明の1実施例においては、共用可能な領域102は、更に、「リードオンリ」エリア112及び「リード/ライト」エリア114の両方を有している。共用可能な領域102はリード/ライトエリアと呼ばれるエリアを包含するものであったとしても、マスターJVMプロセス104は、実際には、共用可能な領域102のリード/ライトエリア114に対して書込を行う唯一のJVMプロセスである。
初期化期間中に、マスターJVMプロセス104がクラスをローディングしている間に(典型的に、これらのクラスのうちのいずれかがいずれかのアプリケーションにより要求される前に)、マスターJVMプロセス104はジャバJARファイル116からのデータをダイジェスト即ち消化し且つダイジェストしたデータのうちの少なくとも幾つかを共用可能な領域102内に配置させる。そのデータが対応するエンティティ(例えば、オブジェクト又はバイトコード)が変更可能であるか否かに依存して、マスターJVMプロセス104は、そのデータを共用可能な領域102のリードオンリエリア112か又はマスターJVMプロセス自身のプライベートなリード/ライト領域108内のいずれかに配置させることが可能である。マスターJVMプロセス104がそれ自身のプライベートなリード/ライト領域108内へ格納するデータは、各JVMプロセス106がプログラムを実行するために必要とするデータを包含している。
マスターJVMプロセスのプライベートなリード/ライト領域108は、固定されたバーチャルアドレス(図1におけるバーチャルアドレス「Y」)に位置され且つ特定され固定されたバーチャルアドレス領域に対してマッピングされ、その意味については後により詳細に説明する。本発明の1実施例においては、共用可能な領域102のリードオンリエリア112がリード/ライトデータに対して何等かの参照を行う場合には、これらのアドレスはマスターJVMプロセスの固定されたアドレス領域108内のものでなければならない。本発明の1実施例においては、リードオンリエリア112におけるメモリ参照/ポインターは、リードオンリエリア112又はリード/ライト領域108内のアドレスに対してのみ指し示すことが可能である。マスターJVMプロセス104がジャバJARファイル116からのデータを完全にダイジェスト即ち消化した後に、マスターJVMプロセス104は、共用可能な領域102のリード/ライトエリア114内に(代替については以下に説明する)、マスターJVMプロセス自身のプライベートなリード/ライト領域108内に格納されているデータをコピーする。共用可能な領域102のリード/ライトエリア114は、基本的に、予め初期化されたリード/ライトメモリである。
ジャバJARファイル116からのデータをダイジェスト即ち消化する場合に、マスターJVMプロセス104はジャバJARファイル116内の各クラスのメソッド及びフィールド(集合的に「メンバー」)を認識する。各このようなメンバーに対して、マスターJVMプロセス104は、そのマスターのタイプに基づいて、そのメンバーがミュータブル(mutable)即ち変更可能であるか否かを決定する。そのメンバーが変更可能である場合には、マスターJVMプロセス104は、初期的に、そのメンバーに対する対応するデータをマスターJVMプロセス自身のプライベートなリード/ライト領域108内に格納する。代替的に、そのメンバーが変更不可能である場合には、マスターJVMプロセス104はそのメンバーに対する対応するデータを共用可能な領域102のリードオンリエリア112内に格納する。基本的に、将来プロセスが書込を行うことが可能ないずれかのエンティティに対するデータは初期的にマスターJVMプロセス自身のプライベートなリード/ライト領域108内に格納される(且つ後に共用可能な領域102のリード/ライトエリア104へコピーされる)。対照的に、プロセスが将来書込むことが不可能なエンティティに対するデータは共用可能な領域102のリードオンリエリア112内に格納される。
例えば、マスターJVMプロセス104はリードオンリ「クイックンド(quickened)」バイトコードを共用可能な領域102のリードオンリエリア112内に格納する場合がある。対照的に、マスターJVMプロセス104は、マスターJVMプロセス自身のプライベートなリード/ライト領域108内に、ストリングオブジェクトに対応するデータを格納する場合があり、そのヘッダープロセスに対してロッキングを実施するために書込むことが可能である。然しながら、マスターJVMプロセス104は、共用可能な領域102のリードオンリエリア112内に、そのストリングオブジェクトのサブオブジェクトであるバイトのアレイ即ち配列に対応するデータを格納する場合があり、というのは、このような配列は変更不可能だからである。
本発明の1実施例においては、マスターJVMプロセス104が上述したタスクを実施した後にいずれかその他のJVMプロセス106がスタートアップする場合には、そのJVMプロセス106は共用可能な領域102へアタッチ即ち取付き、且つ共用可能な領域102からそのJVMプロセス自身のプライベートなリード/ライト領域110内へ、共用可能な領域102のリード/ライトエリア114内に包含されているデータの全てをコピーする。このデータは以下においては「コピーされたデータ」として言及する。JVMプロセス106は共用可能な領域102のリードオンリエリア112内に格納されているデータのそれら自身のコピーを作成することは必要ではない、というのは、リードオンリエリア112内に格納されているデータの全ては変更不可能だからである。従って、JVMプロセス106の全てはそのデータのプライベートなコピーを作成すること無しにリードオンリエリア112内に格納されているデータの単一のコピーから読取ることが可能である。例えば、JVMプロセスの全ては共用可能な領域102のリードオンリエリア112に対してメモリを「マップ」することが可能である。
共用可能な領域102のリードオンリエリア112内に格納されているオブジェクトに対応するデータは、JVMプロセスのプライベートなリード/ライト領域110内に格納されているオブジェクトに対応するデータへの参照を包含している場合があり、且つその逆も又真である。従って、本発明の1実施例においては、同一のコンピューティング装置上で実行するJVMプロセス(マスターJVMプロセス104を含む)の全てのプライベートなリード/ライト領域は、同一のバーチャルアドレス領域を占有する。その結果、コピーされたデータは各JVMプロセスのプライベートなリード/ライト領域110内の同一の固定されたバーチャルアドレスにおいて見つけることが可能である。1個のJVMプロセスのリード/ライト領域110の内容がその他のJVMプロセスのリード/ライト領域110の内容とは異なるものであったとしても、各JVMプロセスのリード/ライト領域110の始めは同一の固定されたバーチャルアドレスにある(図1に示したように固定されたバーチャルアドレス「Y」に位置されている)。その結果、共用可能な領域102のリードオンリエリア112において、JVMプロセスのリード/ライト領域110におけるバーチャルアドレスへの参照が存在している場合には、その参照が参照するバーチャルアドレスは正しい。
本発明の1実施例によれば、共用可能な領域102のリードオンリエリア112からコピーされたデータへの全ての参照(例えば、ポインター)は固定されたメモリアドレスを参照する。本発明の1実施例によれば、共用可能な領域102のリードオンリエリア112がリードオンリエリア112内のアドレスへの参照を包含している場合には、リードオンリエリア112は、同一のコンピューティング装置上で実行するJVMプロセス104及び106の全てが認識する固定されたメモリアドレスに位置されていなければならない。本発明の1実施例においては、リード/ライトエリア114は、リードオンリエリア112内に格納されているデータを参照することが可能である。付加的に、リードオンリエリア112は、リードオンリエリア112内に格納されているデータへの内部的参照を包含することが可能である。リード・ライトセクション内のアドレスを参照するリード・ライトセクション内のポインターはパッチさせることが可能であり、それにより後者のリード・ライトセクションを再位置決めさせることが可能である。リードオンリセクションを参照するリード・ライトセクションにおけるポインターもパッチさせることが可能であり、それによりリードオンリセクションを再位置決めさせることを可能とする。リード・ライトセクション内のアドレスを参照するリードオンリセクション内のポインターは、パッチさせることは不可能であり、従って、本発明の1実施例においては、このようなポインターが許可される場合には、リード・ライトセクションは固定されたアドレスになければならない。リードオンリセクション内のアドレスを参照するリードオンリセクション内のポインターは、パッチさせることは不可能であり、従って、本発明の1実施例においては、このようなポインターが許可される場合には、後者のリードオンリセクションは固定されたアドレスになければならない。ポインターがパッチされていない本発明の実施例においては、リードオンリエリア及びリード・ライトエリアの両方が固定されたアドレスになければならない。然しながら、ポインターがパッチされるか、又は位置独立性参照が使用される場合の本発明の実施例においては、リードオンリ及び/又はリード・ライトセクションはリロケート即ち再位置決めさせることが可能であり、従って固定されたアドレスにあることは必要ではない。
各JVMプロセスのプライベートなリード/ライト領域110が始まる固定されたバーチャルアドレスは各JVMプロセスのコードにおいて特定することが可能である。代替的に、各JVMプロセスのプライベートなリード/ライトエリア110が開始する固定されたバーチャルアドレスは、コンフィギュレーションファイルにおいて特定することが可能であり、それから各JVMプロセス106は読取ることが可能である。固定されたバーチャルアドレスはリンク時間定数とすることが可能である。
その他のJVMプロセス106は、マスターJVMプロセス104が既に「ダイジェスト」即ち消化したデータを使用することが可能である。その他のJVMプロセス106は、ある条件下においては、既にダイジェストされているJARファイルではない幾つかのJARファイルをダイジェストすることが必要な場合がある。マスターJVMプロセス104はJARファイルのうちの幾つかをダイジェストするに過ぎない場合がある。例えそうであったとしても、多くの場合においては、既にダイジェストされているJARファイルの再度のダイジェスト動作を回避することはその他のJVMプロセス106が開始するために必要な時間を著しく減少させる。付加的に、JVMプロセス104及び106の全てがそのデータの別個のコピーを作成する代わりに共用可能な領域102のリードオンリエリア112内のデータの単一のコピーを共用するので、JVMプロセス104及び106が実行するコンピューティング装置のメモリは多くの場合において著しく節約される。このメモリの節約は、そのメモリがこのような態様で節約されなかった場合に許容される場合よりもコンピューティング装置上でより多くの数のJVMプロセス106を同時的に実行することを可能とする場合がある。
特定のエンティティ(例えば、オブジェクト又はバイトコード)が変更可能であるか否かをマスターJVMプロセス104が決定する技術は本発明の種々の実施例において異なる場合がある。本発明の1実施例においては、データの各項目は、そのデータが共用可能な領域102のリードオンリエリア112内に又はマスターJVMのプライベートなリード/ライト領域108内にロードされるべきデータの種類であるか否かを表わす「タグ」と関連している。本発明のこのような実施例においては、データの各項目に対して、マスターJVMプロセス104はデータのその項目と関連するタグに少なくとも部分的に基づいて決定を行う。然しながら、本発明の別の実施例においては、マスターJVMプロセス104はその他の態様でその決定を行うことが可能である。
隔離された共用可能な領域
本発明の1実施例においては、例えマスターJVMプロセスが別個のジャバJARファイルからそのデータの異なる部分をロードした場合であっても、マスターJVMプロセスが共用可能な領域内に配置されるデータの全ては同一の共用可能な領域内へ配置される。このことの結果として、別個のジャバJARファイルからのデータは、マスターJVMプロセスがそのデータを共用可能な領域のリード/ライトエリア内にコピーする場合にJARファイルにより隔離されることはなく、共用可能な領域のリード/ライトエリアからどのデータがどのジャバJARファイルから来たものであるかを告げることが可能でない場合がある。その結果、本発明のこのような実施例においては、その他のJVMプロセスが共用可能な領域のリード/ライトエリアからのデータをそれら自身のプライベートなリード/ライト領域内にコピーする場合には、これらのその他のJVMプロセスはその他のジャバJARファイルから来たデータではなく選択されたジャバJARファイルから来たデータのみをコピーすることのオプションを有するものではない。その他のJVMプロセスがマスターJVMプロセスがロードしたデータの全てを必要とするものではない条件下においては、その他のJVMプロセスはそれらが実際にコピーすることが必要であったものよりもより多くのデータをコピーすることとなる場合がある。
この潜在的な問題を解決するために、本発明の1実施例においては、マスターJVMプロセスは、そこからマスターJVMプロセスがデータをロードする各別個のジャバJARファイルに対し別個の共用可能な領域を確立する。各ジャバJARファイルに対して、マスターJVMプロセスはそのジャバJARファイルからのデータをそのジャバJARファイルに対応する共用可能な領域のみにロード/コピーする。
代替的に、本発明の1実施例においては、マスターJVMプロセスは単一の共用可能な領域を確立するものであるが、そこからマスターJVMプロセスがデータをロードする各別個のジャバJARファイルに対する共用可能な領域内に別個の対のリードオンリエリア及びリード/ライトエリアを確立する。各ジャバJARファイルに対して、マスターJVMプロセスは、そのジャバJARファイルからのそのデータをそのジャバJARファイルに対応するリードオンリエリア及びリード/ライトエリアのみにロード/コピーする。
従って、本発明の1実施例においては、マスターJVMはその他のJVMプロセスのいずれかが使用する場合のある何等かのデータを包含するジャバJARファイルの全てからのデータを処理する。後に、これらのその他のJVMプロセスは、それに対してそれらがマッピングするリードオンリエリア及びそれからそれらがそれら自身のプライベートなリード/ライト領域内にデータをコピーするリード/ライトエリアを選択することが可能である。
ファンクションポインターベクトル
クラスパスはクラスがロードされるコンテキストを表示する。時々、これらのコンテキストの幾つかは、これらのコンテキスト内にロードされたクラスが互いに「気が付いている」ように相互にリンクされている。その他の時において、これらのコンテキストの幾つかは相互にリンクされておらず、従って1つのコンテキスト内にロードされたクラスは別のコンテキスト内にロードされているクラスに「気が付いて」いない。
「ブート(boot)」クラスパスは、いずれかのJVMプロセスが何等かのプログラムを実行するために必要なシステムクラスを包含している場合がある。特定の「アプリケーション」クラスパスは、あるJVMプロセスが特定のアプリケーションプログラムを実行するのに必要とされるアプリケーションクラスを包含している場合があるが、それはそのJVMプロセスがその他のアプリケーションプログラムを実行するのに必要とされるものでない場合がある。
典型的に、JVMプロセスはクラスローダーを使用してクラスをロードする(例えば、ジャバJARファイルから)。異なるクラスローダーにより異なるクラスをロードさせることが可能である。例えば、ブートクラスローダーは、システムクラスの全てをロードするかもしれないが、その他のクラスローダーは特定のアプリケーションに対するアプリケーションクラスをロードする場合がある。本発明の1実施例においては、各クラスローダーはファンクションポインターの別個のベクトルと関連している。
本発明の1実施例においては、マスターJVMプロセス104がクラスをロードする場合には(例えば、上述した技術を使用して)、マスターJVMプロセス104は、そのクラスがブートクラスローダーにより又は何等かのその他のクラスローダーによりロードされるものであるか否かを決定する。本発明の1実施例においては、そのクラスがブートクラスローダーによりロードされる場合には、マスターJVMプロセス104はファンクションポインターの「ブート」ベクトルをブートクラスローダーへ供給する。本発明の1実施例においては、そのクラスが何等かのその他のクラスローダーによりロードされる場合には、マスターJVMプロセス104はファンクションポインターの「デフォルト」ベクトルをそのクラスローダーへ供給する。
本発明の1実施例においては、クラスローダーはそのクラスローダーへ供給されるファンクションポインターのベクトルを受取る。そのベクトルはクラスローダーが実施することを必要とする場合のある異なるタイプの動作に対する異なるファンクションに対するポインターを包含している。例えば、各ベクトルは、(a)クラスローダーがバイトコードに対するメモリを割当てることが必要である場合にクラスローダーがコールすべきファンクション(function)、(b)クラスローダーがインターンされた(interned)即ち抑留されたストリングに対してメモリを割当てることが必要である場合にクラスローダーがコールすべきファンクション、及び(c)クラスローダーが前に割当てられているメモリを解放することが必要である場合にクラスローダーがコールすべきファンクションに対する少なくとも1個のポインターを包含している場合がある。本発明の1実施例においては、クラスローダーが特定の動作タイプの動作を実施することを必要とする場合には、そのクラスローダーは、そのクラスローダーが使用するファンクションポインターベクトルによって表わされるように、その特定の動作タイプに対してファンクションポインターが指し示すファンクションをコールする。
各ファンクションポインターベクトルはクラスローダーが実施することを必要とする場合のある動作の各タイプに対するファンクションポインターを包含している場合があるが、異なるベクトルにおいては、同一のタイプの動作に対するファンクションポインターが異なるファンクションを指し示す場合がある。例えば、「バイトコード割当て」型の動作に対して「ブート」ベクトルにおけるファンクションポインターが指し示すファンクションは、同一の「バイトコード割当て」型の動作に対して「デフォルト」ベクトルにおけるファンクションポインターが指し示すファンクションと異なる場合がある。より詳細には、「ブート」ベクトルが指し示すファンクションは、クラスローダーをして共用可能な領域102のリードオンリエリア112においてバイトコードに対するメモリを割当てさせる場合があり、一方「デフォルト」ベクトルが指し示すファンクションは、クラスローダーをして、従来の「malloc」アプローチを使用してJVMプロセスのヒープ内にそのバイトコードに対してメモリを割当てさせる場合がある。
従って、本発明の1実施例においては、JVMスタートアッププロセス期間中にジャバJARファイルからクラスローダーがデータをロードする場合にこれらのクラスローダーが実施する動作を実施するために異なるクラスローダーが異なるファンクションポインターベクトルを使用する。本発明のこのような実施例においては、同一のクラスローダーによりロードされるクラスの全ては、そのクラスローダーと関連している同一のファンクションポインターベクトルを使用してロードされる。
上の説明は容易に理解される例を示すために「ブート」ファンクションポインターベクトルと「デフォルト」ファンクションポインターベクトルとについて言及するものであるが、本発明の種々の実施例は、これらの特に充実したものより一層多数の異なるファンクションポインターベクトルを関与させることが可能である。
本発明の1実施例においては、異なるファンクションポインターベクトルは異なるジャバJARファイルと関連している。本発明のこのような実施例においては、特定のジャバJARファイルからのクラスをロードする各クラスローダーは、その特定のジャバJARファイルからクラスをローディングする場合に、その特定のジャバJARファイルと関連しているファンクションポインターベクトルを使用する。この特徴は、上述したように、異なるジャバJARファイルからのデータが異なる共用可能な領域又は同一の共用可能な領域の異なるエリア内にロード及び/又はコピーされるべき実施例において特に有用である。
拡張及び代替
上述したように、本発明の1実施例においては、マスターJVMプロセス104は、共用可能な領域102のリード/ライトエリア114内に、変更可能なエンティティに対応するデータを格納する。然しながら、本発明の代替的実施例においては、マスターJVMプロセス104は、共用可能な領域102の代わりに、又はそれに加えて、永続的な非揮発性格納部上のファイル内にこのようなデータを格納し、且つその他のJVMプロセス106はこのファイルからのそのデータをそれら自身のプライベートなリード/ライト領域110内に読込む。従って、その他のJVMプロセス106がコピーすることが必要な「プロトタイプ」変更可能データは永続的なものとさせることが可能である。
上述したように、本発明の1実施例においては、マスターJVMプロセス104は、その領域のコンテンツを共用可能な領域102のリード/ライトエリア114へコピーする前に、変更可能なエンティティに対応するデータをマスターJVMプロセス自身のプライベートなリード/ライト領域108内に格納する。然しながら、本発明の1実施例においては、変更可能なエンティティに対応するデータの少なくとも幾つかはこのような態様で取扱われるものでない場合がある。その代わりに、本発明の1実施例においては、変更可能なエンティティに対応するデータが共用可能な領域102のリードオンリエリア112から又はスタチックメモリ(ビルド時にROM化した構造を含む)から参照されるものでない場合には、そのデータが格納されるメモリは「malloc」を使用して通常通りに割当てることが可能である。その他のJVMプロセスは共用可能な領域102のリード/ライトエリア114からこのような参照されていないデータをコピーすることは必要ではなく、従ってマスターJVMプロセス104はこのような参照されていないデータを共用可能な領域102のリード/ライトエリア114内にコピーすることは必要ではない。本発明の1実施例においては、解放させることが必要な一時的なメモリ、及びクラスローディングと関係していないメモリも「malloc」を使用して通常通りに割当てられる。
本発明の1実施例においては、スタチックメモリから共用可能な領域102のリードオンリエリア112又はリード/ライトエリア114のいずれかに対する全ての参照が識別される。これらの参照は、次いで、共用可能な領域102を使用する各JVMプロセス内にパッチされる。
本発明の1実施例においては、コンピューティング装置上の「マスター」JVMプロセスはそのコンピューティング装置上でスタートアップする最初のJVMプロセスである。本発明の1実施例においては、1つのJVMプロセスがスタートアップすると、そのJVMプロセスは、それがスタートアップする最初のJVMプロセスであるか否かを決定する。そのJVMプロセスが、それがスタートアップする最初のJVMプロセスであることを決定すると、そのJVMプロセスは、マスターJVMプロセスの役割を担い、且つ上述した技術を使用してジャバJARファイルからのデータのローディングを開始する。代替的に、そのJVMプロセスが、それがスタートアップする最初のJVMプロセスではないことを決定すると、ジャバJARファイルからのデータの再ローディングを行う代わりに、そのJVMプロセスは共用可能な領域102の既に確立されているリードオンリエリアに対してマッピングし、且つ共用可能な領域102のリード/ライトエリア114から、それ自身のプライベートなリード/ライト領域内に、マスターJVMプロセス104が以前にそこに配置したデータのコピーをコピーする。JVMプロセスは、例えば、共用可能な領域が既に存在するか否かを決定することにより、それがスタートアップする最初のJVMプロセスであるか否かを決定することが可能である。共用可能な領域102が既に存在する場合には、そのJVMプロセスは、マスターJVMプロセスの役割を既に担っているその他のJVMプロセスが共用可能な領域102を作成したものと仮定することが可能である。本発明の1実施例においては、JVMプロセスが開始する場合に、それはメモリ内に存在するデータが新しいものであるか否か(JVMの最も最近のバージョンがコンパイルされる前に格納されたものであった場合にはそのデータは新鮮なものでない場合がある)を決定し(例えば、ハッシュコードを使用して)、且つ、そのデータが新鮮なものでない場合には、そのJVMプロセスはそのデータの新たなリフレッシュしたバージョンを作成する。本発明の1実施例においては、各JVMプロセスはそのデータを使用する手順の前に共用可能な領域102内に存在するデータのアドレスに関して「サニティチェック」を実施する。本発明の別の実施例においては、各JVMプロセスは共用可能な領域102の開始アドレスに関してこのような「サニティチェック」を付加的に又は代替的に実施する。
本発明の幾つかの実施例についてJVM及びジャバJARファイルに関連して上に説明したが、本発明の別の実施例を、JVM以外のバーチャルマシンに関して及び/又はジャバJARファイル以外のプログラムモジュールに関して適用することが可能である。本発明の実施例は、バーチャルマシンがプログラムモジュールからデータをロードする如何なる文脈においても適用可能なものである。
上述した本発明の実施例は、一般的に、プログラムモジュールからデータをローディングするバーチャルマシンに関連して説明している。然しながら、バーチャルマシンがスタートアップする場合には、プログラムモジュールからデータをローディングする以外のタスクが存在する場合があり、それは、このようなバーチャルマシンが、典型的に、プログラムを実施することが可能となる前に実施することを必要とするものである。本発明の1実施例においては、マスターJVMプロセス104がスタートアップする場合に、マスターJVMプロセス104はジャバJARファイルから派生したものではないデータをダイジェストし且つ共用可能な領域内にロードする。典型的に、マスターJVMプロセス104の初期的な実行のスレッドはスタックを作成する。これらのスタックはリードオンリでない場合があるが、それらは常に同一であるデータエンティティを参照する場合がある。本発明の1実施例においては、マスターJVMプロセス104はこれらのタスクを共用可能な領域102のリード/ライトエリア114内に格納し、それによりその他のJVMプロセス106に対するタスクを「事前初期化」する。本発明の1実施例においては、マスターJVMプロセス104が、(a)その他のJVMプロセス106に対して同一であり、且つ(b)そうでなければその他のJVMプロセス106が独立的にそれらを処理することが必要となるデータを共用可能な領域102へ格納又はコピーする。幾つかのランタイムで発生されるルックアップテーブルがこのようなデータの例である。
例えば、1つのこうようなテーブルは「JITイントリンシックス(intrinsics)」に関連するデータを包含している場合がある。マスターJVMプロセス104はこのテーブルを共用可能な領域102内に格納する場合がある。このようなテーブルは、初期的には、圧縮された形式で存在する場合があるが、ランタイムでアクセスするのにより便利であるデータ構造へ圧縮解除される場合がある。従って、テーブルに対する以下の参照は、代替的に、そのテーブルが圧縮解除されたデータ構造へ参照する場合がある。別のJVMプロセス106はこのテーブルへアクセスすることを必要とする場合がある。マスターJVMプロセス104がそのテーブルをリードオンリエリア112内に格納した場合にマスターJVMプロセス104はそのテーブルのアクセスを採取する。従って、マスターJVMプロセス104はそのテーブルへのポインターを有している。本発明の1実施例においては、共用可能な領域102は、付加的に、リードオンリエリア及びリード・ライトエリア112及び114内のデータをその他のJVMプロセス106に対して可視的なものとさせるためにパッチさせることが必要なアドレスのリストを包含している(例えば、リード/ライトエリア114において又は別個の専用のエリアにおいて)。このリストが読取られ且つJVMプロセスのプライベートなリード/ライト領域110内のアドレスが、そのリストにおいて示されるように、パッチされ、共用可能な領域102内の正しいメモリ位置を参照する。パッチレコードは、通常、アドレスとデータとを有している。パッチング(patching)の結果として、その他のJVMプロセス106も、それらのプライベートなリード/ライト領域110内において、共用可能な領域102内のテーブルに対するポインターを有している。本発明の1実施例においては、マスターJVMプロセス104はこのアドレスのリストを作成し、且つその他のJVMプロセス106は、それらがマスターJVMプロセスではないことを決定した場合に、そのリストを読取り且つそれをそれらのアドレス空間へ適用する。通常、そのリストはリロケートさせることが不便であったポインターに対応するアドレスを包含している。
JVMプロセスのスタートアップ動作の幾つかは、特定のジャバJARファイルからのクラスローディングが終了した後まで延期させることが最善である場合があり、その時に、これらの動作は「後処理」パスの一部として実施される場合がある。例えば、本発明の1実施例においては、特定のジャバJARファイルからのクラスの全てがロードされた後であるが、JVMプロセスがスタートアッププロセスを終結する前に、そのJVMプロセスは該クラスの全てを検査し且つバイトコードの全てがクイックン(quicken)されているか否か、シンボルの全てが解決されているか否か、及びコンスタントプール(constant pool)エントリの全てが解決されているか否かを決定する。別の例の場合には、本発明の1実施例においては、後処理は、そのデータがリードオンリであることが意図されていた場合には、そのデータがJVMプロセスの全てに対してリードオンリのままであることを確保するために、既にメモリに書込まれたデータを保護することが関与する。JVMプロセスが複数の別個のジャバJARファイルからのクラスをロードする本発明の1実施例においては、JVMプロセスは、1個のJARファイルからデータをローディングした後で且つ別のJARファイルからのデータのローディングを開始する前にこれらの後処理動作を実施する。
Tim Lindholm及びFrank Kellin共著の「ザ・ジャバ・バーチャル・マシン仕様(The JAVA Virtual Machine Spicification)」、第二版を引用によりここに取込む。以下の特許、即ち1996年5月30日付で出願された米国特許第5,815,718号、1998年8月10日付で出願された米国特許第5,966,542号、及び1999年10月12日付で出願された米国特許第6,223,346号も引用によりここに取込む。
ハードウエア概観
図2は本発明の1実施例を実現することが可能なコンピュータシステム200を例示したブロック図である。コンピュータシステム200は、情報交換を容易とするためのバス202、情報を処理するためにバス202と結合されている1個又はそれ以上のプロセッサ204を包含している。コンピュータシステム200は、又、プロセッサ204によって実行されるべき情報及び命令を格納するためにバス202へ結合されているランダムアクセスメモリ(RAM)又はその他のダイナミック記憶装置等のメインメモリ206を包含している。メインメモリ206は、又、プロセッサ204による命令の実行期間中に一時的な変数又はその他の中間的な情報を格納するために使用することが可能である。コンピュータシステム200は、更に、プロセッサ204に対するスタチックな情報及び命令を格納するためにバス202に結合されているリードオンリメモリ(ROM)208又はその他のスタチック記憶装置を包含することが可能である。磁気ディスク又は光学的ディスク等の記憶装置210が情報及び命令を格納するために設けられており且つバス202へ結合されている。
コンピュータシステム200は、コンピュータユーザに対し情報を表示するために陰極線管(CRT)等のディスプレイ212へバス202を介して結合させることが可能である。英文字及びその他のキーを包含する入力装置214が情報及びコマンド選択をプロセッサ204へ通信するためにバス202へ結合されている。別のタイプのユーザ入力装置はマウス、トラックボール、又は方向情報及びコマンド選択をプロセッサ204へ通信し且つディスプレイ212上のカーソルの運動を制御するカーソル方向器等のカーソル制御器部216である。この入力装置は、典型的に、2つの軸、即ち第一軸(例えば、x)及び第二軸(例えばy)において2つの自由度を有しており、そのことは該装置が面内における位置を特定することを可能とする。
コンピュータシステム200において、バス202は情報、信号、データ等を種々のコンポーネント間で交換させることを可能とする任意のメカニズム及び/又は媒体とすることが可能である。例えば、バス202は電気信号を担持する1組の導体とすることが可能である。バス202は、又、コンポーネントのうちの1つ又はそれ以上の間でワイヤレス信号を担持するワイヤレス媒体とすることが可能である。バス202は、又、コンポーネントのうちの1つ又はそれ以上の間で容量的に信号を交換することを可能とする媒体とすることが可能である。バス202は、更に、コンポーネントのうちの1つ又はそれ以上を接続するネットワーク接続とすることが可能である。総括的に、情報、信号、データ等を種々のコンポーネント間において交換させることを可能とする任意のメカニズム及び/又は媒体をバス202として使用することが可能である。
バス202は、又、これらのメカニズム/媒体の結合とすることも可能である。例えば、プロセッサ204はワイヤレスによって記憶装置210と通信することが可能である。このような場合において、バス202は、プロセッサ204及び記憶装置210の観点からは、電磁波等のワイヤレス媒体である。更に、プロセッサ204は容量的にROM208と通信することが可能である。この例においては、バス202は容量的通信を行うことを可能とする媒体である。更に、プロセッサ204は、ネットワーク接続を介してメインメモリ206と通信を行うことが可能である。この場合には、バス202はネットワーク接続である。更に、プロセッサ204は1組の導体を介してディスプレイ212と通信することが可能である。この場合には、バス202は1組の導体である。従って、どのようにして種々のコンポーネントが互いに通信を行うかに依存して、バス202は異なる形態をとることが可能である。バス202は、図2に示したように、情報、信号、データ等を種々のコンポーネント間において交換することを可能とさせるメカニズム及び/又は媒体の全てを機能的に表わしている。
本発明はここに記載した技術を実現するためにコンピュータシステム200の使用に関連している。本発明の1実施例によれば、これらの技術は、メインメモリ206内に包含されている1個又はそれ以上の命令からなる1個又はそれ以上のシーケンスを実行するプロセッサ204に応答してコンピュータシステム200によって実施される。このような命令は、記憶装置210等の別の機械読取可能な媒体からメインメモリ206内に読込むことが可能である。メインメモリ206内に包含されている命令からなるシーケンスの実行は、プロセッサ204をしてここに記載した処理ステップを実施させる。別の実施例においては、本発明を実現するためにソフトウエア命令の代わりに又はそれと結合してハードワイヤード回路を使用することが可能である。従って、本発明の実施例はハードウエア回路とソフトウエアの特定の組合わせに制限されるものではない。
ここにおいて使用されているような「機械読取可能な媒体」という用語は、マシン即ち機械をして特定の態様で動作させるデータを供給することに関与する任意の媒体のことを意味している。コンピュータシステム200を使用して実現される実施例においては、種々の機械読取可能な媒体が、例えば、実行のためにプロセッサ204へ命令を供給する場合に関与する。このような媒体は、これらに制限されるものではないが、非揮発性媒体、揮発性媒体、伝送媒体等の多くの形態をとることが可能である。非揮発性媒体は、例えば、記憶装置210等の光学又は磁気ディスクを包含している。揮発性媒体は、メインメモリ206等のダイナミックメモリを包含している。伝送媒体は、同軸ケーブル、銅ワイヤ及びオプチカルファイバーを包含しており、バス202を有するワイヤを包含している。伝送媒体は、又、電波又は赤外線データ通信期間中に発生されるものを含む音響又は光波の形態をとることが可能である。
機械読取可能な媒体の一般的な形態は、例えば、フロッピィディスク、フレキシブルディスク、ハードディスク、磁気ディスク、又は何等かのその他の磁気媒体、CD−ROM、何等かのその他の光学的媒体、パンチカード、ペーパーテープ、穴からなるパターンを具備する何等かのその他の物理的媒体、RAM、PROM、EPROM、フラッシュEPROM、何等かのその他のメモリチップ又はカートリッジ、以下に説明するような搬送波、又はそれからコンピュータが読取ることが可能な何等かのその他の媒体を包含している。
機械読取可能な媒体の種々の形態は、実行のためにプロセッサ204に対して1個又はそれ以上の命令からなる1個又はそれ以上のシーケンスを搬送することに関与する場合がある。例えば、命令は初期的には遠隔コンピュータの磁気ディスク上に担持されている場合がある。その遠隔コンピュータはその命令をダイナミックメモリ内にロードし且つその命令をモデムを使用して電話線を介して送信することが可能である。コンピュータシステム200に対してローカルなモデムは電話線を介してそのデータを受取り且つ赤外線送信器を使用してそのデータを赤外線信号へ変換することが可能である。赤外線検知器は、赤外線信号内に担持されるデータを受取ることが可能であり且つ適宜の回路がそのデータをバス202上に配置させることが可能である。ガス202はそのデータをメインメモリ206へ運び、そこからプロセッサ204が命令を検索し且つ実行する。メインメモリ206により受取られる命令は、オプションとして、プロセッサ204による実行の前又は後のいずれかにおいて記憶装置210上に格納即ち記憶させることが可能である。
コンピュータシステム200は、又、バス202へ結合されている通信インターフェース218を包含している。通信インターフェース218はローカルネットワーク222へ接続されているネットワークリンク220への二方向データ通信カップリングを与えている。例えば、通信インターフェース218は統合サービスデジタルネットワーク(ISDN)カード又はモデムとして対応するタイプの電話線へのデータ通信接続を与えることが可能である。別の例として、通信インターフェース218は互換性のあるLANへのデータ通信接続を与えるためのローカルエリアネットワーク(LAN)カードとすることが可能である。ワイヤレスリンクを実現することも可能である。いずれかのこのような実現例において、通信インターフェース218は種々のタイプの情報を表わすデジタルデータストリームを担持する電気的、電磁的、又は光学的信号を送信し且つ受信する。
ネットワークリンク220は、典型的に、1個又はそれ以上のネットワークを介してその他のデータ装置へのデータ通信を与える。例えば、ネットワークリンク220はローカルネットワーク222を介してホストコンピュータ224への又はインターネットサービスプロバイダー(ISP)226により運用されるデータ装置への接続を与えることが可能である。ISP226は今や「インターネット」228として一般的に呼ばれるワールドワイドパケット通信ネットワークを介してのデータ通信サービスを提供する。ローカルネットワーク222及びインターネット228の両方は、デジタルデータストリームを担持する電気的、電磁的、又は光学的信号を使用する。コンピュータシステム200へ及びそらからのデジタルデータを担持する種々のネットワークを介しての信号及びネットワークリンク220上及び通信インターフェース218を介しての信号は情報を輸送する搬送波の例示的な形態である。
コンピュータシステム200はネットワーク、ネットワークリンク220及び通信インターフェース218を介して、メッセージを送信し且つプログラムコードを含むデータを受信することが可能である。インターネットの例においては、サーバー230はインターネット228、ISP226、ローカルネットワーク222、通信インターフェース218を介してアプリケーションプログラム用の要求されたコードを送信する場合がある。
プロセッサ204は、コードが受取られる場合に及び/又は後に実行するために記憶装置210又はその他の非揮発性格納部内に格納され受取ったコードを実行することが可能である。このように、コンピュータシステム200は搬送波の形態においてアプリケーションコードを得ることが可能である。
前述した説明において、本発明の実施例を実現例毎に異なる場合のある多数の特定の詳細を参照して説明した。従って、何が発明であるか及び出願人によって発明であると意図されているものが何であるかの唯一且つ排他的な指標は本願から発行される特許請求の範囲及び事後の補正を含めこのような特許請求の範囲が発行される特定の形態にあるものである。このような特許請求の範囲内に含まれる用語に対してここにおいて明示的に記載した如何なる定義も特許請求の範囲において使用されているこのような用語の意味を支配すべきものである。従って、特許請求の範囲において明示的に記載されていない制限、要素、特性、特徴、利点又は属性はこのような特許請求の範囲を何等制限すべきものではない。従って、本明細書及び図面は制限的な意味ではなく例示的なものとしてみなされるべきである。
本発明の1実施例に基づいて複数個の同時的に実行する孤立したJVMプロセス間でジャバJARファイルを共用するシステムの論理的コンポーネント及び側面を例示したブロック図。 本発明のある実施例を実現することが可能な例示的コンピュータエンティティのハードウエアブロック図。
符号の説明
102 共用可能な領域
104 マスターJVMプロセス
106 その他のJVMプロセス
108,110 プライベートリード/ライト領域
112 リードオンリエリア
114 リード/ライトエリア
116 ジャバ(JAVA)JARファイル
120,122 リードオンリエリアに対してマッピングされており且つ固定されたバーチャルアドレス「X」に位置されているメモリ
200 コンピュータシステム
202 バス
204 プロセッサ
206 メインメモリ
208 ROM
210 記憶装置
212 ディスプレイ
214 入力装置
216 カーソル制御部
218 通信インターフェース
220 ネットワークリンク
222 ローカルネットワーク
224 ホスト
226 ISP
228 インターネット
230 サーバー

Claims (13)

  1. 複数の孤立したバーチャルマシンの間でプログラムモジュールを共用するための機械により実行される方法であって、
    第一バーチャルマシンのマスタープロセスによって、プログラムモジュールから第一データをロードするステップと、
    前記第一データが変更可能であることに基づいて、前記マスタープロセスによって、前記第一バーチャルマシンに割り当てられた第一プライベートメモリ領域内に前記第一データを格納するステップであり、前記第一データは前記第一プライベートメモリ領域内の或る仮想アドレスで始まるよう格納される、ステップと、
    前記第一データが変更可能であることに基づいて、前記マスタープロセスによって、前記第一プライベートメモリ領域から共用可能なメモリ領域の第一区域に前記第一データをコピーするステップであり、
    前記共用可能なメモリ領域は、複数の孤立したバーチャルマシンによって読取可能であり、且つ
    前記共用可能なメモリ領域は、変更可能なデータ用の前記第一区域と、前記第一区域とは別の、変更不可能なデータ用の第二区域とを有する、
    ステップと、
    前記第一データが変更可能であることに基づいて、前記共用可能なメモリ領域の前記第一区域から、第二バーチャルマシンの第二プライベートメモリ領域内へ、前記第一データをコピーするステップであり、前記第一データは、前記第二プライベートメモリ領域内に前記仮想アドレスで始まるよう格納される、ステップと、
    前記マスタープロセスによって、前記プログラムモジュールから第二データをロードするステップと、
    前記第二データが変更不可能であることに基づいて、前記マスタープロセスによって、前記共用可能なメモリ領域の前記第二区域内に前記第二データを格納するステップと、
    前記第二データが変更不可能であることに基づいて、前記第二バーチャルマシンと、前記第二データを有する前記共用可能なメモリ領域の前記第二区域と、の間のマッピングを確立するステップと、
    を有し、
    前記マッピングは、前記第二バーチャルマシンの如何なるプライベートメモリ領域内にも前記第二データのコピーを作成することなく、前記第二バーチャルマシンが前記第二データを読取ることを可能にし、且つ
    前記第一プライベートメモリ領域及び前記第二プライベートメモリ領域の双方が同一の仮想アドレスで開始する、
    方法。
  2. 前記第一データは、ランタイムにおいて前記第二バーチャルマシンにより使用可能でない第一フォームから、ランタイムにおいて前記第一バーチャルマシン及び前記第二バーチャルマシンの双方によって使用可能な第二フォームへと、前記第一バーチャルマシンが処理したデータを有する、請求項1に記載の方法。
  3. 前記プログラムモジュールはジャバJARファイルであり、且つ前記第一データは少なくとも1個のジャバクラスに対応している、請求項1に記載の方法。
  4. 前記第一データが前記第二プライベートメモリ領域内にコピーされた後、前記第二データは、(a)前記第一プライベートメモリ領域内の第一の仮想アドレス及び(b)前記第二プライベートメモリ領域内の第二の仮想アドレスの双方を参照する少なくとも1個の参照を包含し、前記第一の仮想アドレスは前記第二の仮想アドレスと同一である、請求項1に記載の方法。
  5. 前記プログラムモジュールから直接的に如何なるデータもロードすることなく、前記第二バーチャルマシンが前記第一データ及び前記第二データを使用してプログラムを実行するステップ、を更に有する請求項1に記載の方法。
  6. 前記第一データが前記共用可能なメモリ領域内に存在する時間の前、前記第二データにおける参照は、前記第一プライベートメモリ領域内の前記第一データのコピー内の特定の仮想メモリアドレスを参照し、
    前記第一データが前記第二プライベートメモリ領域内に存在する時間の後、前記第二データにおける前記参照は、前記第二プライベートメモリ領域内の前記第一データのコピー内の同一の特定の仮想メモリアドレスを参照する、
    請求項1に記載の方法。
  7. 1つ以上の命令シーケンスを格納した機械読取可能な記憶媒体であって、該命令シーケンスは、1つ以上のプロセッサによって実行されるとき、該1つ以上のプロセッサに:
    第一バーチャルマシンのマスタープロセスによって、プログラムモジュールから第一データをロードするステップと、
    前記第一データが変更可能であることに基づいて、前記マスタープロセスによって、前記第一バーチャルマシンに割り当てられた第一プライベートメモリ領域内に前記第一データを格納するステップであり、前記第一データは前記第一プライベートメモリ領域内の或る仮想アドレスで始まるよう格納される、ステップと、
    前記第一データが変更可能であることに基づいて、前記マスタープロセスによって、前記第一プライベートメモリ領域から共用可能なメモリ領域の第一区域に前記第一データをコピーするステップであり、
    前記共用可能なメモリ領域は、複数の孤立したバーチャルマシンによって読取可能であり、且つ
    前記共用可能なメモリ領域は、変更可能なデータ用の前記第一区域と、前記第一区域とは別の、変更不可能なデータ用の第二区域とを有する、
    ステップと、
    前記第一データが変更可能であることに基づいて、前記共用可能なメモリ領域の前記第一区域から、第二バーチャルマシンの第二プライベートメモリ領域内へ、前記第一データをコピーするステップであり、前記第一データは、前記第二プライベートメモリ領域内に前記仮想アドレスで始まるよう格納される、ステップと、
    前記マスタープロセスによって、前記プログラムモジュールから第二データをロードするステップと、
    前記第二データが変更不可能であることに基づいて、前記マスタープロセスによって、前記共用可能なメモリ領域の前記第二区域内に前記第二データを格納するステップと、
    前記第二データが変更不可能であることに基づいて、前記第二バーチャルマシンと、前記第二データを有する前記共用可能なメモリ領域の前記第二区域と、の間のマッピングを確立するステップであり、前記第二データは、前記仮想アドレスを用いた前記第一データへの参照を有する、ステップと、
    を実行させ、
    前記マッピングは、前記第二バーチャルマシンの如何なるプライベートメモリ領域内にも前記第二データのコピーを作成することなく、前記第二バーチャルマシンが前記第二データを読取ることを可能とし、
    前記第一プライベートメモリ領域及び前記第二プライベートメモリ領域の双方が同一の仮想アドレスで開始する、
    機械読取可能な記憶媒体。
  8. 前記第一データは、ランタイムにおいて前記第二バーチャルマシンによって使用可能でない第一フォームから、ランタイムにおいて前記第一バーチャルマシン及び前記第二バーチャルマシンの双方によって使用可能な第二フォームへと、前記第一バーチャルマシンが処理したデータを有する、請求項7に記載の機械読取可能な記憶媒体。
  9. 前記プログラムモジュールはジャバJARファイルであり、且つ前記第一データは少なくとも1個のジャバクラスに対応している、請求項7に記載の機械読取可能な記憶媒体。
  10. 前記第一データが前記第二プライベートメモリ領域内にコピーされた後、前記第二データは、(a)前記第一プライベートメモリ領域内の第一の仮想アドレス及び(b)前記第二プライベートメモリ領域内の第二の仮想アドレスの双方を参照する少なくとも1個の参照を包含し、前記第一の仮想アドレスは前記第二の仮想アドレスと同一である、請求項7に記載の機械読取可能な記憶媒体。
  11. 前記命令シーケンスは、前記1つ以上のプロセッサに更に、
    前記プログラムモジュールから直接的に如何なるデータもロードすることなく、前記第二バーチャルマシンが前記第一データ及び前記第二データを使用してプログラムを実行するステップ、
    を実行させる、請求項7に記載の機械読取可能な記憶媒体。
  12. 前記第一データが前記共用可能なメモリ領域内に存在する時間の前、前記第二データにおける参照は、前記第一プライベートメモリ領域内の前記第一データのコピー内の特定の仮想メモリアドレスを参照し、且つ
    前記第一データが前記第二プライベートメモリ領域内に存在する時間の後、前記第二データにおける前記参照は、前記第二プライベートメモリ領域内の前記第一データのコピー内の同一の特定の仮想メモリアドレスを参照する、
    請求項7に記載の機械読取可能な記憶媒体。
  13. 複数の孤立したバーチャルマシンの間でプログラムモジュールを共用するためのコンピュータプログラムであって、1つ以上のプロセッサによって実行されるとき、該1つ以上のプロセッサに:
    第一バーチャルマシンのマスタープロセスによって、プログラムモジュールから第一データをロードするステップと、
    前記第一データが変更可能であることに基づいて、前記マスタープロセスによって、前記第一バーチャルマシンに割り当てられた第一プライベートメモリ領域内に前記第一データを格納するステップであり、前記第一データは前記第一プライベートメモリ領域内の或る仮想アドレスで始まるよう格納される、ステップと、
    前記第一データが変更可能であることに基づいて、前記マスタープロセスによって、前記第一プライベートメモリ領域から共用可能なメモリ領域の第一区域に前記第一データをコピーするステップであり、
    前記共用可能なメモリ領域は、複数の孤立したバーチャルマシンによって読取可能であり、且つ
    前記共用可能なメモリ領域は、変更可能なデータ用の前記第一区域と、前記第一区域とは別の、変更不可能なデータ用の第二区域とを有する、
    ステップと、
    前記第一データが変更可能であることに基づいて、前記共用可能なメモリ領域の前記第一区域から、第二バーチャルマシンの第二プライベートメモリ領域内へ、前記第一データをコピーするステップであり、前記第一データは、前記第二プライベートメモリ領域内に前記仮想アドレスで始まるよう格納される、ステップと、
    前記マスタープロセスによって、前記プログラムモジュールから第二データをロードするステップと、
    前記第二データが変更不可能であることに基づいて、前記マスタープロセスによって、前記共用可能なメモリ領域の前記第二区域内に前記第二データを格納するステップと、
    前記第二データが変更不可能であることに基づいて、前記第二バーチャルマシンと、前記第二データを有する前記共用可能なメモリ領域の前記第二区域と、の間のマッピングを確立するステップと、
    を実行させ、
    前記マッピングは、前記第二バーチャルマシンの如何なるプライベートメモリ領域内にも前記第二データのコピーを作成することなく、前記第二バーチャルマシンが前記第二データを読取ることを可能にし、且つ
    前記第一プライベートメモリ領域及び前記第二プライベートメモリ領域の双方が同一の仮想アドレスで開始する、
    コンピュータプログラム。
JP2008173812A 2007-07-02 2008-07-02 共用型ジャバjarファイル Expired - Fee Related JP5236367B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/824,850 2007-07-02
US11/824,850 US7882198B2 (en) 2007-07-02 2007-07-02 Shared JAVA JAR files

Publications (3)

Publication Number Publication Date
JP2009059349A JP2009059349A (ja) 2009-03-19
JP2009059349A5 JP2009059349A5 (ja) 2011-06-02
JP5236367B2 true JP5236367B2 (ja) 2013-07-17

Family

ID=39639646

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008173812A Expired - Fee Related JP5236367B2 (ja) 2007-07-02 2008-07-02 共用型ジャバjarファイル

Country Status (3)

Country Link
US (2) US7882198B2 (ja)
EP (1) EP2017730A1 (ja)
JP (1) JP5236367B2 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4930010B2 (ja) * 2006-11-24 2012-05-09 株式会社日立製作所 シンクライアントシステムへの移行方法
US7882198B2 (en) * 2007-07-02 2011-02-01 Oracle America, Inc. Shared JAVA JAR files
US7930328B2 (en) * 2008-03-31 2011-04-19 Lenovo (Singapore) Pte. Ltd. Apparatus, system, and method for file system sharing
WO2011148447A1 (ja) * 2010-05-24 2011-12-01 パナソニック株式会社 仮想計算機システム、領域管理方法、及びプログラム
US9009386B2 (en) 2010-12-13 2015-04-14 International Business Machines Corporation Systems and methods for managing read-only memory
US9507613B2 (en) * 2012-03-30 2016-11-29 Oracle International Corporation Methods and apparatus for dynamically preloading classes
CN102722370B (zh) * 2012-05-24 2016-05-25 南京华设科技股份有限公司 Android模块化开发方法
CN103870312B (zh) * 2012-12-12 2018-01-23 华为技术有限公司 建立虚拟机共享存储缓存的方法及装置
JP6103994B2 (ja) * 2013-03-13 2017-03-29 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 文字列データ処理方法、プログラム及びシステム
US20140283116A1 (en) * 2013-03-18 2014-09-18 Protection Technologies Research, Llc Method for protected execution of code and protection of executable code and data against modifications
CN104216771B (zh) * 2013-05-30 2018-01-23 华为技术有限公司 软件程序的重启方法及装置
US9923726B2 (en) * 2014-12-03 2018-03-20 International Business Machines Corporation RDMA transfers in mapreduce frameworks
US10261703B2 (en) * 2015-12-10 2019-04-16 International Business Machines Corporation Sharing read-only data among virtual machines using coherent accelerator processor interface (CAPI) enabled flash
US10394528B2 (en) 2016-03-30 2019-08-27 Oracle International Corporation Returning a runtime type loaded from an archive in a module system
US10191753B2 (en) 2016-03-30 2019-01-29 Oracle International Corporation Generating verification metadata and verifying a runtime type based on verification metadata
GB202019527D0 (en) * 2020-12-10 2021-01-27 Imagination Tech Ltd Processing tasks in a processing system

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5815718A (en) 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
US6738977B1 (en) 2000-05-31 2004-05-18 International Business Machines Corporation Class sharing between multiple virtual machines
US7689986B2 (en) * 2003-10-21 2010-03-30 Gemstone Systems, Inc. Shared listeners in shared object space
US7587721B2 (en) * 2004-05-20 2009-09-08 Sap Ag Sharing objects in runtime systems
US7512769B1 (en) * 2004-10-06 2009-03-31 Hewlett-Packard Development Company, L.P. Process migration
US7694065B2 (en) * 2004-12-28 2010-04-06 Sap Ag Distributed cache architecture
US7734892B1 (en) * 2005-03-31 2010-06-08 Rozas Guillermo J Memory protection and address translation hardware support for virtual machines
US8024566B2 (en) * 2005-04-29 2011-09-20 Sap Ag Persistent storage implementations for session data within a multi-tiered enterprise network
US20060271510A1 (en) * 2005-05-25 2006-11-30 Terracotta, Inc. Database Caching and Invalidation using Database Provided Facilities for Query Dependency Analysis
US7882198B2 (en) * 2007-07-02 2011-02-01 Oracle America, Inc. Shared JAVA JAR files

Also Published As

Publication number Publication date
EP2017730A1 (en) 2009-01-21
JP2009059349A (ja) 2009-03-19
US7882198B2 (en) 2011-02-01
US8176142B2 (en) 2012-05-08
US20100023702A1 (en) 2010-01-28
US20110145358A1 (en) 2011-06-16

Similar Documents

Publication Publication Date Title
JP5236367B2 (ja) 共用型ジャバjarファイル
US10698845B2 (en) Set buffer state instruction
US7203941B2 (en) Associating a native resource with an application
US6460126B1 (en) Computer resource management system
US7584473B2 (en) Highly componentized system architecture with loadable virtual memory manager
US7143421B2 (en) Highly componentized system architecture with a demand-loading namespace and programming model
US8434099B2 (en) Efficient linking and loading for late binding and platform retargeting
US7565665B2 (en) Efficient linking and loading for late binding and platform retargeting
US9176713B2 (en) Method, apparatus and program storage device that provides a user mode device interface
US6330709B1 (en) Virtual machine implementation for shared persistent objects
US6154878A (en) System and method for on-line replacement of software
US6484309B2 (en) Enabling software designed for one operating system to operate on another operating system
US20060095483A1 (en) Modified computer architecture with finalization of objects
US5526523A (en) Interface between operating system and operating system extension
US6301582B1 (en) System and method for storage of shared persistent objects
US8255922B1 (en) Mechanism for enabling multiple processes to share physical memory
US6996590B2 (en) Method and system for the garbage collection of shared data
JPH0644085A (ja) アクセスを実行する方法及び装置並びにコンピュータシステム
EP1763771A1 (en) Modified computer architecture with finalization of objects
US20080184195A1 (en) Code generation in the presence of paged memory
US20090133042A1 (en) Efficient linking and loading for late binding and platform retargeting
US7665075B1 (en) Methods for sharing of dynamically compiled code across class loaders by making the compiled code loader reentrant
US6223344B1 (en) Apparatus and method for versioning persistent objects
US20110185129A1 (en) Secondary java heaps in shared memory
JP5845221B2 (ja) 高速パッチベースメソッドコール

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20110113

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20110118

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110418

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110418

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120807

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121107

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121127

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130205

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130226

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130327

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160405

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees