説明

携帯型データ記憶媒体のメモリ管理

【課題】プログラムの実行中に生成されるオブジェクトを格納するための第1および第2のメモリ領域を有する携帯型データ記憶媒体によってプログラムの実行中にメモリを管理する。
【解決手段】オブジェクト(38、40、44)の少なくとも一部が第2のメモリ領域(36)に作成される。更なるプログラム実行中に、オブジェクト(38、40、44)への永続リファレンス(42)が生成された場合、オブジェクトは第1のメモリ領域34に転送される。実行によりオブジェクトを作成した特定のメソッドの終了時に、特定のメソッドが、解放されるべき第2のメモリ領域のメモリスペースに存在するオブジェクトへのリファレンスをリターンしないときに、第2のメモリ領域の占有状態を示す占有状態指標を特定のメソッドが呼び出された時点における占有状態にリセットすることにより、第2のメモリ領域のメモリスペースを特定のメソッドが呼び出された時点のレベルまで解放する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、広義には、プロセッサを有する携帯型データ記憶媒体によるプログラム実行中のメモリ管理の技術分野に関する。そのような種類の携帯型データ記憶媒体は、特に、さまざまな構造形態のチップカードまたはチップモジュールであり得る。さらに詳細には、本発明は、プログラム実行中に生成されるオブジェクトを記憶するために、データ記憶媒体の2つの異なるメモリ領域を使用することに関する。
【背景技術】
【0002】
一般に携帯型データ記憶媒体には、さまざまな記憶技術で構成された複数のメモリ領域が設けられている。一般に、メモリは、揮発性読出し/書込みメモリ(RAM)、不揮発性書込可能メモリ(EEPROM)およびマスクプログラム方式の固定メモリ(ROM)に細分される。RAMへの書込み動作はEEPROMへの書込み動作より大幅に少ない時間(例えば、30分の1の時間)ですむ。他方では、データ記憶媒体の半導体チップ上で、RAM内の1ビットはEEPROM内の1ビットよりもかなり大きなエリアを占めるので、通常、比較的小さいRAMしか設けることができない。このため、高速であるが少ないRAMを最善かつ最大にできる限りフレキシブルに利用するという課題が存在する。
【0003】
複雑なメモリ管理機能を備えた携帯型データ記憶媒体は、例えばJava Cardという商標で知られている。2002年6月に米国パロアルトの企業サン・マイクロシステム社(Sun Microsystems, Inc.)によって公表され、インターネットでhttp://java.sun.com/products/javacardから入手可能な非特許文献1には、プログラム(「Java Card」Applet)実行用に「Java Card」内に提供される環境について説明されている。第5章に、一般に永続オブジェクトがデータ記憶媒体のEEPROMに格納されるのに対し、一般に一時オブジェクトはRAMに作成されると記載されている。セキュリティ上の理由により、一時オブジェクトをEEPROMに格納することは許されない。
【0004】
上記の「Java Card」のメモリ管理では、例えば、2002年6月に米国パロアルトの企業サン・マイクロシステム社(Sun Microsystems, Inc.)によって公表され、インターネットで上記アドレスから入手可能な非特許文献2に記載されているように、一時オブジェクトを生成するために特殊なシステムコールが使用されるが、これによって一時オブジェクトの実用限界が制限されている。また、このような一時オブジェクトは潜在的に無限の寿命を備えている。ここで、「一時」という用語は、オブジェクトに格納されるデータを指しているに過ぎない。したがって、一時オブジェクトは、メモリ管理のフレキシビリティをわずかに増加させるだけである。
【0005】
「Java Card」プログラミングにおいて推奨される一般的な手法は、プログラム(アプレット)の寿命全体を通じて必要な全オブジェクトをプログラムインストール時に静的に生成するというものである。これは、「インストール」という指定名称を有するメソッドで実施される。しかしながら、この手法では、フレキシビリティの低いメモリ管理となり、したがって、最適なものではない。例えば、暗号化動作のための一時データを格納するために一時フィールドが作成されるとき、そのためにRAM内に静的に予約されたメモリスペースは一般に他のプログラムには利用できない。プログラム内で、このような予約メモリスペ―スを他のタスクにも使用できる範囲はプログラマの技量による。
したがって、RAM内の少ないメモリスペースの利用度を向上させ、メモリ管理を自動化することが望まれる。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】Java Card(商標)実行環境(JCRE)仕様書(Java CardTM 2.2 Runtime Environment (JCRE) Specification)
【非特許文献2】Java Card(商標)アプリケーション・プログラミング・インタフェース(Java CardTM 2.2 Application Programming Interface)、81〜85ページ
【発明の概要】
【発明が解決しようとする課題】
【0007】
そこで本発明の課題は、従来技術の問題の少なくとも一部分を解消すること、および、効率的に書き込めるメモリ領域(一般にRAMメモリ)の利用度を向上させる、携帯型データ記憶媒体におけるメモリ管理法を提供することである。特に本発明は、プログラマをさほど煩わせずにRAMメモリをフレキシブルに利用できるようにするものである。
【課題を解決するための手段】
【0008】
本発明によれば、この課題の全体または一部は、請求項1に記載のプログラム実行中のメモリ管理方法、請求項7に記載のソースプログラム変換方法、請求項12に記載の携帯型データ記憶媒体、および請求項13に記載のコンピュータプログラム製品によって解決される。従属請求項は本発明の好ましい実施態様に関係する。
【0009】
本発明の基礎をなす基本概念は、プログラム実行中に携帯型データ記憶媒体によって生成されるオブジェクトを、例えばRAMなど、効率的に書き込めるメモリ領域に自動的に作成する、というものである。そのために、短寿命しか有しないオブジェクトについて考察した。そのような種類のオブジェクトを、本明細書では「ローカルオブジェクト」と呼ぶ。本発明で理解されるローカルオブジェクトは、例えば、例外発生時に生成される例外オブジェクトであり得る。例外オブジェクトの寿命は、該当の例外がキャッチされるとすぐに終わる。
【0010】
本発明によれば、一時的に必要とされるメモリスペースを短期間、動的に(すなわち、ローカルオブジェクトの形態で)利用可能とすることができる。ローカルオブジェクトの一部または全体を、RAMまたは他の効率的に書き込めるメモリに作成する。本発明の自動ダイナミックメモリ管理の結果、メモリが十分に利用され、それにより、実行プログラムの処理速度およびこの実行プログラムが効率的に利用できるメモリスペースについて、データ記憶媒体の効率が増加する。
【0011】
オブジェクトの寿命はオブジェクトへのリファレンスが無くなった時点で一般に終わりとなる。オブジェクトへのアクセスが不可能となるからである。詳細には、ローカルオブジェクトは、オブジェクトへの永続リファレンスが存在しないことによって宣言できる。本明細書では、「永続リファレンス」はオブジェクトへのリファレンスと理解され、このリファレンスはオブジェクトのフィールド、静的フィールド、またはアレイのフィールドに永続的に格納される。オブジェクトへのリファレンスが上記フィールドのうちの1つに書き込まれた途端に、このオブジェクトはもうローカルオブジェクトであり得ない。これに対し、例えばオペランドスタックまたはローカル変数に含まれているオブジェクトへの非永続リファレンスは、ローカルオブジェクトまたは非ローカルオブジェクトというオブジェクト分類に影響を及ぼさない。
【0012】
オブジェクトをローカルオブジェクトとして処理すべきか、または非ローカルオブジェクトとして処理すべきかに関する判別は、プログラムのコンパイル時、実行時、または一部をコンパイル時で一部を実行時、に行うことができる。実行時に判別を行なう場合は、新たに生成するオブジェクトのうちの少なくともいくつかを、最初に、第2の効率的に書き込めるメモリ領域に作成する。更なるプログラム実行中に、オブジェクトへの永続リファレンスが作成されたかどうかの監視が行われる。オブジェクトへの永続リファレンスが作成された途端に、もうこのオブジェクトはローカルオブジェクトと見なされなくなる。その後、このオブジェクトを第1の不揮発性メモリ領域に転送する。
【0013】
コンパイル時に判別を行なう場合は、ソースプログラムの一部、すなわち、オブジェクトへの永続リファレンスを作成するか否かのオブジェクト世代を含む部分、をコンパイラによって解析する。引き続きコンパイラは、この解析の結果に基づき、オブジェクトを第1のメモリ領域に作成するプログラムコードかまたは全部または一部を第2のメモリ領域に作成するプログラムコードを生成する。本明細書の用語法では、「コンパイラ」という用語は自動変換手順を実行するすべてのプログラムを含むものとする。したがって、「コンパイラ」は、狭い意味での「Java」コンパイラのほかに、例えば、CAPファイル(カードアプリケーションファイル)および最適化プログラム生成用のコンバータのことも指すものとする。
【0014】
コンパイル時のソースプログラム解析により、一般に、ただ1つの近似結果が得られる。このことは、不確実性の度合がローカルまたは非ローカルというオブジェクトの2分類のうちの一方と対応していることを意味すると理解される。したがって、確実にローカルであると認識されたオブジェクトだけを第2のメモリ領域に作成し、その他すべてのオブジェクトが第1のメモリ領域に作成するように準備することができる。これに対し、別の実施態様では、確実に非ローカルであると認識されるオブジェクトだけを第1のメモリ領域に作成し、その他すべてのオブジェクトを第2のメモリ領域に作成するように準備することができる。また、少なくとも確実にローカルであると分類できなかったオブジェクトに対して、前述の実行時監視を実施する。実施態様のうちのいくつかの形態において、オブジェクトをローカルまたは非ローカルと特徴付けることができるコンパイラ指示文(プラグラム)が提供される。
【0015】
好ましい実施態様において、オブジェクトを第1のメモリ領域に作成すべきかまたは最初に第2のメモリ領域に作成すべきかを判断するために、簡素な基準が適用される。例えば、プログラムのインストールメソッドによって生成するオブジェクトを第1のメモリ領域に作成するように準備することができる。実施態様のさまざまな形態において、他のすべてのオブジェクトを最初に第2のメモリ領域に作成することも可能であるし、それぞれの種類のオブジェクトだけをそのようにすることも可能である。そのような種類のオブジェクトは、例えば、例外オブジェクトまたは暗号化動作のために一時的にのみ必要とされるオブジェクトであり得る。
【0016】
ローカルオブジェクトの寿命は、通常、ローカルオブジェクトを生成したメソッドの−リターンまたは例外に由来する−終了とともに終わる。存在しているはずの、オブジェクトへのローカルリファレンスがこの瞬間に無くなるからである。その後、第2のメモリ領域内のオブジェクトにまだ必要なメモリスペースを解放できる。オブジェクトを生成したメソッドのリターンパラメータとしてオブジェクトを使用するとき、上記規則に対する例外が適用される。この場合、呼出しメソッドがオブジェクトへのリファレンスを受け取るので、少なくともこの呼出しメソッドが終了するまでオブジェクトが削除されることはない。
【0017】
実施態様のいくつかの形態において、第2のメモリ領域の解放されたメモリスペースを新オブジェクトの作成に利用できるようにするために、メモリのクリーンアップ(カーベージコレクション)を行う。しかし、これはプログラム実行中に時間がかかり、実行時環境を複雑化する。そのため、第2のメモリ領域における占有状態を占有状態指標(Fuellstandszeigers)によって示す、特に簡素な方法が使用されることが好ましい。メソッドの終了時、通常、占有状態指標はメソッド呼出し時の状態にリセットされる。好ましい実施態様において、第2のメモリ領域の、リセットによって解放される部分が、メソッドのリターンパラメータとして使用されるオブジェクトを含んでいるときに限って規則に対する例外が作られる。
【0018】
そのように要求された場合、オブジェクトを第2のメモリ領域から第1のメモリ領域に確実に転送できるようにするために、好ましくは第2のメモリ領域にオブジェクトが既に生成されているときに、オブジェクトのための十分なスペースが第1のメモリ領域で利用可能かどうかも確認する。また、更なるプログラムの実行中、新しいオブジェクトが作成されるときに、必要と考えられるオブジェクト転送のための十分なスペースが常に確実に第1のメモリ領域に存在していることが好ましい。
【0019】
好ましい実施態様において、第1のメモリ領域がデータ記憶媒体のEEPROMまたは他の不揮発性書込み可能メモリに置かれるのに対し、第2のメモリ領域はRAMまたは他の効率的に書き込めるメモリに配される。第2のメモリ領域は、特にローカルヒープおよび/またはスタックメモリの形態とすることができる。既にコンパイル時にローカルオブジェクトと識別されたオブジェクトについては、スタックメモリに格納することが有利である。
【0020】
本発明によるコンピュータプログラム製品は、本発明による変換方法を実施するためにプログラムコマンドを含んでいる。そのような種類のコンピュータプログラム製品は、本発明による方法を実施するためのプログラムを格納する、例えば半導体メモリまたはディスクまたはCD−ROMなどの物理的媒体とすることができる。しかし、コンピュータプログラム製品は、例えばコンピュータネットワークによって転送される信号など、非物理的な媒体とすることもできる。コンピュータプログラム製品は、携帯型記憶媒体用のプログラムを生成するために一般的なワークステーションコンピュータによって実行されるコンパイラであることが好ましい。
【0021】
好ましい実施態様において、データおよび/またはコンピュータプログラム製品は、前述および/または独立方法クレームに記載の特徴に対応する特徴を有している。
【0022】
本発明のその他の特徴、利点および機能は、以下の例示実施形態および数多くの他の実施形態の具体的な説明から明らかになるであろう。添付図面を参照されたい。
【図面の簡単な説明】
【0023】
【図1】本発明の例示実施形態にしたがう携帯型データ記憶媒体のブロック図である。
【図2】新オブジェクト作成時に実施される手順の流れ図である。
【図3】一例として、プログラム実行中のスタックメモリおよびローカルヒープのメモリ占有状態を示す図である。
【図4】メソッド終了時に実施される手順の流れ図である。
【図5】実行可能なプログラムへのソースプログラムの変換を示す概略図である。
【発明を実施するための形態】
【0024】
図1に示されるデータ記憶媒体10は、この例示実施形態では、「Java Card」規格にしたがうチップカードの形態をしている。データ記憶媒体10は、プロセッサ12、さまざまな技術で構成された複数のメモリゾーン、および非接触式または接触式通信のためのインタフェース回路14を1つの半導体チップ上に備えている。この例示実施形態では、固定メモリ16、不揮発性書込み可能メモリ18、および読出し/書込みメモリ20がメモリゾーンとして設けられている。固定メモリ16はマスクプログラム方式のROMの形態をしており、不揮発性メモリ18は電気消去可能プログラマブルEEPROMの形態をしており、読出し/書込みメモリ20はRAMの形態をしている。不揮発性メモリ18への書込み動作は比較的面倒で、例えば、読出し/書込みメモリ20への書込み動作の30倍もの時間を要する。
【0025】
データ記憶媒体10の動作に必要なシステムプログラム22は固定メモリ16に含まれ、一部分は不揮発性メモリ18にも含まれている。システムプログラム22は、それ自体が公知となっている態様で、オペレーティングシステム24を含み、また、この例示実施形態ではJCVM(Java Card Virtual Machine)の形態をしている仮想マシンを実施するプログラムコード26も含んでいる。また、アプリケーション・プログラミング・インタフェースを利用できるようにするクラスライブラリ28も設けられている。データ記憶媒体10の初期設定時に、「Java Card」アプレットの形態のプログラム30が不揮発性メモリ18にロードされるが、別の実施形態では、プログラムの全体または一部分を固定メモリ16に置くことができる。図1には1つのプログラム30しか示されていないが、もっと多くのプログラムを携帯型データ記憶媒体10のプロセッサ12に実行させるようにすることも可能である。プログラム30は、下記で30.xと総称される複数のメソッド30.1、30.2、30.3、30.4を含んでいる。メソッド30.xは、それ自体が公知となっている態様で、プログラム30をインストールするための「インストール」メソッドと呼ばれるメソッド、受信データパッケージを処理するための「プロセス」メソッドと呼ばれるメソッドを含み、また、データ記憶媒体10の複数のプログラム間の変更時に呼び出される「選択」メソッドおよび「選択解除」メソッドを任意で含んでいる。
【0026】
読出し/書込みメモリ20にあるスタックメモリ32は、プログラム実行中にオペランド、戻りアドレス、ローカル変数および他のデータ値を格納する。スタックメモリ32の空き領域は、図1に斜線で示されている。不揮発性メモリ18には、それ自体が公知となっている態様で永続ヒープの形態をしている第1のメモリ領域が確保されている。一般的な「Java Card」アーキテクチャによれば、すべてのオブジェクト、静的データフィールドおよび非一時アレイがこの永続ヒープに形成される。これに対し、本例示実施形態では、永続ヒープは選択的にしか使用しない。短寿命しか有さず、永続リファレンスによる参照が行われていないローカルオブジェクトは、第1のメモリ領域34ではなく、読出し/書込みメモリ20の第2のメモリ領域36に作成される。第2のメモリ領域36は、永続ヒープと同様に、オブジェクトを格納する役割を果たすので、ローカルヒープとも呼ばれる。
【0027】
上記状況を説明するために、一例として、第1のメモリ領域34に形成され、それぞれ複数のデータフィールドを備えている2つのオブジェクト38、40が図1に示されている。第1のオブジェクト38のデータフィールドのうちの1つは、第2のオブジェクト40へのリファレンス42を含んでいる。リファレンス42は、永続格納されるデータフィールドに含まれているので「永続リファレンス」とも呼ばれる。第2のオブジェクト40は、永続リファレンス42によって参照されるため、ローカルオブジェクトではなく永続オブジェクトである。第2のメモリ領域36には、一例として、ローカルオブジェクト44が示されている。例えばスタックメモリ32で形成されたローカル変数に含まれているローカルリファレンス46は、ローカルオブジェクト44を参照する。スタックメモリ32内の別の値は占有状態指標48として、第2のメモリ領域36の空きメモリの開始を示す。この空きメモリは図1に斜線で示されている。
【0028】
データ記憶媒体10の実行中に、”NEW”コマンドによって新オブジェクトの形成が要求されたときは、図2に示される手順が実施される。まず、ステップ50で、新オブジェクトを作成するために十分なメモリスペースの空きが第1のメモリ領域にあるか否かの確認がなされる。利用できるメモリスペースが不十分な場合、エラーメッセージとともにオブジェクトの生成が中止される。本例示実施形態では、最初に第2のメモリ領域36に作成されたオブジェクトでさえも第1のメモリ領域34に確実に随時転送できるように、ステップ50の確認は、作成されるオブジェクトの性質と無関係に実施される。
【0029】
本例示実施形態では、プログラム30の「インストール」メソッドによって作成されるオブジェクトは常に永続オブジェクトと見なされ、したがって、第1のメモリ領域34に入れられようになっている。したがって、ステップ52では、プログラムのインストールが現在実施されているか否かの照会が行われる。インストールが実施されていれば、ステップ54で、新オブジェクトが第1のメモリ領域34に永続オブジェクトとして生成される。ステップ54で実施される生成手順は、一般的な「Java Card」の場合に実施される永続ヒープにおけるオブジェクト作成に対応するものである。
【0030】
ステップ52でプログラム実行がインストールメソッド以外であることが確認された場合、本例示実施形態では、作成される新オブジェクトは、最初はローカルオブジェクトとして扱われる。その後、このオブジェクトは、十分なメモリスペースが空いていること(ステップ56で確認される)を前提として、第2のメモリ領域36(ローカルヒープ)に作成される。ローカルヒープで十分なメモリスペースが利用可能である場合、ステップ58で、次の空き位置(これまで使っていた領域のすぐ隣の)にオブジェクトが作成され、これに応じて占有状態指標48が更新される。しかし、ローカルヒープがすでにいっぱいになっている場合は、ステップ54で、第1のメモリ領域34にオブジェクトを作成するための一般的な手順が実施される。もちろん、この領域には、ステップ50で確認された通り、利用可能な十分な空きメモリスペースがまだ残っている。
【0031】
データ記憶媒体10による更なるプログラム30実行中、永続リファレンスが生成または変更されるたびに、このリファレンスが第2のメモリ領域36にあるオブジェクトを参照しているか否かの確認が行われる。参照している場合、オブジェクトは第2のメモリ領域36から第1のメモリ領域34に転送される。ステップ50の照会のため、オブジェクト転送が随時可能であることが保証されている。
【0032】
本例示実施形態では、メソッド30.xの終了後に、このメソッド30.xで生成されたローカルオブジェクトが占有していたメモリスペースを簡単に解放できるように、第2のメモリ領域36がスタックメモリと同様に構成されている。この手順を説明するため、一例として、いくつかのスタックフレーム60.1、60.2、60.3によるスタックメモリ32の占有状態を図3に示す。それ自体が公知となっている態様で、各メソッド30.xが呼び出されると新しいスタックフレーム60.xが作成されるが、メソッド30.xの終了と同時に削除される。スタックフレ―ム60.xには、呼出しメソッドへの戻りアドレス、管理および機密データが格納され、また、呼び出されたメソッドのローカル変数も任意で格納される。
【0033】
本例示実施形態では、各スタックフレーム60.xに、当該メソッド30.xの実行中に占有状態指標48を入れる占有状態フィールド(Fuellstandsfeld)62.xも設けられている。一例として示されている図3の図では、占有状態フィールド62.3が最新の占有状態指標48を含み、占有状態フィールド62.2がスタックフレーム60.3に対応するメソッドが呼び出された時点で最新であった占有状態を含んでいる。64.3の部分は、呼び出されたために現在実施されているメソッドが新たに占有しているローカルヒープの一部分を指している。ローカルヒープ内の64.1および64.2の部分は、呼び出しによってメモリフレーム60.1および60.2の作成を生じさせたメソッドで埋められている。
【0034】
ここに記載されている例示実施形態では、メソッドによって占有された、第2のメモリ領域36内のスペースを、メソッドの終了時に完全に解放するようになっている。これは、メソッド終了時に、対応するスタックフレーム60.x(占有状態フィールド62.xを含んでいる)を処分し、占有内容が内部に格納されている次に古いスタックフレーム60.(x−1)の占有状態フィールド62.(x−1)を新占有状態指標48として使用することによって、難なく行われる。したがって、例えば、呼出しによってスタックフレーム60.3の形成を生じさせるメソッドの終了後、占有状態フィールド62.2の内容が新占有状態指標48として使用されるので、メモリ部分64.3全体が解放される。
【0035】
終了したばかりのメソッドが第2のメモリ領域36に作成されたローカルオブジェクトへのリファレンスを呼出しメソッドにリターンする場合に、上記パラグラフに記載された規則に対する例外が存在する。この場合、ローカルオブジェクトが上書きされないようにするために、最新の占有状態フィールド62.xの内容が次に古いスタックフレーム60.(x−1)にコピーされる。例えば、図3のメモリ占有配置では、メモリフレーム60.3を作成したメソッドが、メモリ領域64.3にあるオブジェクトへのリファレンスをリターンする場合、前のスタックフレーム60.2の占有状態フィールド62.2に占有状態フィールド62.3の値がコピーされる。
【0036】
メソッド終了時の上記手順を図4に再度図解する。ステップ70の結果に応じて、直前のスタックフレーム60.(x−1)の占有状態フィールド62.(x−1)を復活させられるか(ステップ72)か、または最新の占有状態指標48の値を直前のスタックフレーム60.(x−1)に引き継がされる。
【0037】
図5は、コンパイラ82によって「Java」ソースプログラム80をCAPファイル(カードアプリケーションファイル)84に変換する、それ自体が公知である変換手順を示す。CAPファイル84は、次に、例えばデータ記憶媒体10の初期設定時に、ローディングプログラム86によってデータ記憶媒体10にプログラム30としてロードされる。本明細書に記載される例示実施形態では、コンパイラ82は、ソースプログラム80をバイトコードに変換するための実際のコンパイルモジュールのほかに、さまざまな正確性チェックを実施する、「オフカード仮想マシン」とも呼ばれるコンバータを備えている。
【0038】
前述の方法では、新たに作成されるオブジェクトを第1のメモリ領域34に生成すべきか第2のメモリ領域36に作成すべきかを決定するために、ステップ52で、実行時に簡単な照会が実施された。また、永続リファレンスの作成および更新時には、別の実行時チェックが実施された。これに対し、別の実施形態では、前記チェックは、全体的または部分的に、コンパイラ82のレベルに対して行われる。
【0039】
コンパイラ82は、ソースプログラム80または中間コードの抽象解析により、後のプログラム実行中に新しく作成されるオブジェクトをローカルオブジェクトと見なすべきか、非ローカルオブジェクトと見なすべきかに関する情報を得ることができる。引き続きコンパイラ82は、この分析結果に基づき、第1のメモリ領域34または第2のメモリ領域36にオブジェクトを作成させるプログラムコードを生成する。別の実施形態では、コンパイル時に確実にローカルであると認識された、ローカル変数などのオブジェクトがスタックメモリ32に作成される。これらの実施形態のスタックメモリ32は、ローカルヒープを読出し/書込みメモリ20に付加的に供給するか否かに応じて、第2のメモリ領域36の全体または第2のメモリ領域36の一部分を形成する。
【0040】
ソースプログラム80は、通常、コンパイル時にローカルオブジェクトまたは非ローカルオブジェクトとはっきり分類できないオブジェクトを生成するためのコマンドを有する。そのようなオブジェクトは、第1のメモリ領域34に直ちに作成することもできるし、前述の態様で、最初に第2のメモリ領域36にローカルオブジェクトとして作成し、必要となったときに第1のメモリ領域34に転送するだけとすることもできる。
【符号の説明】
【0041】
10 データ記憶媒体
12 プロセッサ
14 インタフェース回路
16 固定メモリ
18 不揮発性メモリ
20 読出し/書込みメモリ
30 プログラム
32 スタックメモリ
34 第1のメモリ領域
36 第2のメモリ領域
38、40、44 オブジェクト
42 永続リファレンス
48 占有状態指標

【特許請求の範囲】
【請求項1】
プログラムの実行中に生成されるオブジェクトを格納するための第1および第2のメモリ領域を有する携帯型データ記憶媒体によって前記プログラムの実行中にメモリを管理する方法であって、前記第2のメモリ領域への書込み動作が前記第1のメモリ領域への書込み動作よりも高速に実施される方法であり、
プログラムの特定のメソッド実行の結果として生成されるオブジェクトの少なくとも一部を前記第2のメモリ領域に作成するステップと、
更なるプログラムの実行中に、前記オブジェクトへの永続的に格納されたリファレンスが生成されたかどうかを監視するステップ、
更なるプログラム実行中に、前記オブジェクトへの永続的に格納されたリファレンスが生成された場合に、前記オブジェクトを前記第1のメモリ領域に転送するステップと、
前記実行によりオブジェクトを作成した前記特定のメソッドの終了時に、第2のメモリ領域を解放するステップであって、少なくとも前記特定のメソッドが、解放されるべき第2のメモリ領域のメモリスペースに存在するオブジェクトへのリファレンスをリターンしないときに、前記第2のメモリ領域の占有状態を示す占有状態指標を前記特定のメソッドが呼び出された時点における占有状態にリセットすることで、前記第2のメモリ領域のメモリスペースを前記特定のメソッドが呼び出された時点のレベルまで解放するステップとを有することを特徴とする方法。
【請求項2】
前記永続的なリファレンスが生成されたどうかを監視するステップが、前記永続的に可能されたリファレンスが生成され、または修正されるたびに実行されることを特徴とする請求項1に記載の方法。
【請求項3】
オブジェクトを前記第2のメモリ領域に作成するときに、必要となるであろう前記オブジェクトの転送のための十分なスペースが第1のメモリ領域内で利用できるか否か確認することを特徴とする請求項1又は2に記載の方法。
【請求項4】
前記プログラムのインストール中に生成するオブジェクトを前記第1のメモリ領域に作成することを特徴とする請求項1〜3のいずれか1項に記載の方法。
【請求項5】
ソースプログラムからの前記プログラムの生成時にローカルオブジェクトと識別されたオブジェクトだけを、最初に前記第2のメモリ領域に作成することを特徴とする請求項1〜4のいずれか1項に記載の方法。
【請求項6】
前記オブジェクトが、例外発生時に生成される例外オブジェクトであることを特徴とする請求項1〜4のいずれか1項に記載の方法。
【請求項7】
前記オブジェクトが、暗号化動作のために一時的に必要とされるオブジェクトであることを特徴とする請求項1〜4のいずれか1項に記載の方法。
【請求項8】
前記特定のメソッドが、受信データパケットを処理するためのプロセスメソッドであることを特徴とする請求項1〜7のいずれか1項に記載の方法。
【請求項9】
前記特定のメソッドが、データ記憶媒体の複数のプログラム間の変更時に呼び出される選択または選択解除メソッドとは異なるメソッドであることを特徴とする請求項1〜8のいずれか1項に記載の方法。
【請求項10】
前記占有状態指標のリセットによる第2のメモリ領域のメモリスペースの解放は、ガベージコレクションの処理とは異なることを特徴とする請求項1〜9のいずれか1項に記載の方法。
【請求項11】
コンパイラにより、ソースプログラムを、携帯型データ記憶媒体によって実行されるようになっているプログラムに変換する方法であって、前記データ記憶媒体が、前記プログラムの実行中に生成されるオブジェクトを格納するための第1および第2のメモリ領域を有し、前記第2のメモリ領域への書込み動作が前記第1のメモリ領域への書込み動作よりも高速に実施される方法において、
前記ソースプログラムの、前記オブジェクトの生成をもたらす部分の変換に際して、前記コンパイラが前記ソースプログラムの部分を解析し、前記オブジェクトへの永続的に格納されたリファレンスが、前記ソースプログラムの被変換部分に後続するプログラム実行の間に生成される否かを判断し、該判断の結果に応じて、前記コンパイラが、前記オブジェクトを前記第1のメモリ領域に作成するプログラムコードを生成するか、または前記オブジェクトの少なくとも一部を前記第2のメモリ領域に作成するプログラムコードを生成することを特徴とする方法。
【請求項12】
生成された前記プログラムが前記携帯型データ記憶媒体によって実行されることで、請求項1〜10のいずれか1項に係る方法が実行されるようになっていることを特徴とする請求項11に記載の方法。
【請求項13】
前記第2のメモリ領域に形成されるオブジェクトが、一時的にのみ必要とされるローカルオブジェクトであることを特徴とする請求項1〜12のいずれか1項に記載の方法。
【請求項14】
前記第2のメモリ領域が、ローカルヒープ形式のメモリ領域であることを特徴とする請求項1〜13のいずれか1項に記載の方法。
【請求項15】
前記第2のメモリ領域が、スタックメモリ内に配置されることを特徴とする請求項1から14のいずれか1項に記載の方法。
【請求項16】
前記データ記憶媒体が「Java Card」であり、前記プログラムが「Java Card」アプレットであることを特徴とする請求項1〜15のいずれか1項に記載の方法。
【請求項17】
プロセッサおよび少なくとも1つのメモリを有し、前記メモリが、請求項1〜10にしたがう方法を前記プロセッサに実施させるプログラムコマンドを含んでいることを特徴とする携帯型データ記憶媒体。
【請求項18】
請求項11または請求項12に記載の特徴を有する方法をコンピュータに実施させるプログラムコマンドを備えていることを特徴とするコンパイラ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2012−164350(P2012−164350A)
【公開日】平成24年8月30日(2012.8.30)
【国際特許分類】
【出願番号】特願2012−105134(P2012−105134)
【出願日】平成24年5月2日(2012.5.2)
【分割の表示】特願2006−505369(P2006−505369)の分割
【原出願日】平成16年5月4日(2004.5.4)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(596007511)ギーゼッケ ウント デフリエント ゲーエムベーハー (47)
【氏名又は名称原語表記】Giesecke & Devrient GmbH
【Fターム(参考)】