(57)【特許請求の範囲】
【請求項１】
アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備える電子情報記憶媒体であって、
前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、
前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、
前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、
前記検査命令処理手段により前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段と、
を備え、
前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、前記不揮発性メモリにおいて当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、
前記書換手段は、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第３の命令を示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第３の命令を示す識別番号に書き換えることを特徴とする電子情報記憶媒体。
【請求項２】
アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備える電子情報記憶媒体であって、
前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、
前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、
前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、
前記検査命令処理手段により前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段と、
を備え、
前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号でないと判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、当該第１の命令を示し且つ検査済であることを示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、
前記書換手段は、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第１の命令を示し且つ検査済であることを示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第１の命令を示し且つ検査済であることを示す識別番号に書き換えることを特徴とする電子情報記憶媒体。
【請求項３】
前記検査命令処理手段は、前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、前記バッファ領域に空きが有るか否かを判定し、当該バッファ領域に空きが有ると判定した場合、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定することを特徴とする請求項１または２に記載の電子情報記憶媒体。
【請求項４】
前記実行手段は、前記アプリケーションの２回目以降の前記処理期間中に取得した前記識別番号が、前記第１の命令を示し且つ検査済であることを示す識別番号であるとき、当該識別番号が示す前記命令に応じた処理を実行し、前記検査命令処理手段は、前記第１の命令と連結させる前記第２の命令を示す識別番号であるか否かの判定を行うことなく、当該実行手段は、次の前記識別番号を取得し当該識別番号が示す前記命令に応じた処理を実行することを特徴とする請求項２に記載の電子情報記憶媒体。
【請求項５】
アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備える電子情報記憶媒体に含まれるコンピュータにより実行されるアプリケーション置換方法であって、
前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、
前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、
前記アプリケーション置換方法は、
前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理ステップと、
前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換ステップと、
を含み、
前記検査命令処理ステップにおいては、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、前記不揮発性メモリにおいて当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、
前記書換ステップにおいては、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第３の命令を示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第３の命令を示す識別番号に書き換えることを特徴とするアプリケーション置換方法。
【請求項６】
アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備える電子情報記憶媒体に含まれるコンピュータにより実行されるアプリケーション置換方法であって、
前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、
前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、
前記アプリケーション置換方法は、
前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記アプリケーションに記述された複数の前記識別番号のうちから取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理ステップと、
前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換ステップと、
を含み、
前記検査命令処理ステップにおいては、前記他の前記識別番号が前記第２の命令を示す識別番号でないと判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、当該第１の命令を示し且つ検査済であることを示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、
前記書換ステップにおいては、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第１の命令を示し且つ検査済であることを示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第１の命令を示し且つ検査済であることを示す識別番号に書き換えることを特徴とするアプリケーション置換方法。
【請求項７】
アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、コンピュータとを備える電子情報記憶媒体において前記コンピュータを、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段として機能させるプログラムであって、
前記不揮発性メモリは、前記複数種類の命令群の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、
前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、
前記プログラムは、さらに、前記コンピュータを、
前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、
前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段として機能させ、
前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、前記不揮発性メモリにおいて当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、
前記書換手段は、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第３の命令を示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第３の命令を示す識別番号に書き換えることを特徴とするプログラム。
【請求項８】
アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、コンピュータとを備える電子情報記憶媒体において前記コンピュータを、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段として機能させるプログラムであって、
前記不揮発性メモリは、前記複数種類の命令群の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、
前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、
前記プログラムは、さらに、前記コンピュータを、
前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、
前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段として機能させ、
前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号でないと判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、当該第１の命令を示し且つ検査済であることを示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、
前記書換手段は、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第１の命令を示し且つ検査済であることを示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第１の命令を示し且つ検査済であることを示す識別番号に書き換えることを特徴とするプログラム。
【請求項９】
アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備えるＩＣカードであって、
前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、
前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、
前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、
前記検査命令処理手段により前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段と、
を備え、
前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、前記不揮発性メモリにおいて当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、
前記書換手段は、前記ＩＣカードのリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第３の命令を示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第３の命令を示す識別番号に書き換えることを特徴とするＩＣカード。
【請求項１０】
アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備えるＩＣカードであって、
前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、
前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、
前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、
前記検査命令処理手段により前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段と、
を備え、
前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号でないと判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、当該第１の命令を示し且つ検査済であることを示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、
前記書換手段は、前記ＩＣカードのリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第１の命令を示し且つ検査済であることを示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第１の命令を示し且つ検査済であることを示す識別番号に書き換えることを特徴とするＩＣカード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションに記述された識別番号を実行順に取得し該取得した識別番号が示す命令に応じた処理を実行する仮想マシンを備えるＩＣチップ等の電子情報記憶媒体の技術に関する。
【背景技術】
【０００２】
近年のＩＣカードに搭載されるＩＣチップは、Java Cardに対応しているものが多い。Java Cardは、Java（登録商標）で記述されたアプリケーションを、Global Platformの規格に定められたINSTALLコマンドによって、ＩＣチップにダウンロードし、ＩＣチップ上で動作させるためのＯＳ機構である。Javaといったプログラム言語は、ハードウェアの依存性を吸収するために、Ｃ言語のようにコンパイルによってソースコードからネイティブコード（機械語）に変換されるものと異なり、コンパイラによって中間言語と呼ばれる実行形式であるバイトコードに変換される。バイトコードとは、算術や分岐といった命令を示す識別番号である。このバイトコードは、仮想マシン（Virtual Machine）により実行される。
【０００３】
さて、上述したプログラム言語において、アプリケーション作成のために定義された（つまり、サポートされている）命令（言い換えれば、バイトコード）は約２００種類ある。アプリケーションの作りによって依存はするものの、１つのアプリケーションに占めるバイトコードの数は、偏っていることが多い。例えば、あるアプリケーションのバイトコードを集計した結果、アプリケーションを構成するバイトコード（アプリケーションに記述されるバイトコード）の総数が３６０１５個であり、使用されたバイトコードの種類が１８５種類であった。そのうち、１０種類のバイトコードで、アプリケーションを構成する全体のバイトコードの約５割を占めていることが判明した。この結果はあくまで一例であるが、傾向としては特定のバイトコードが頻繁に呼ばれることはよくある。
【０００４】
ところで、ＩＣチップにインストールされるアプリケーションに対する速度要求は、特に決済処理の用途などにおいて、高くなってきている。一方、ＩＣチップに搭載されるＣＰＵの動作クロック（一般的に数MHz〜数十MHz）は、一般的なパソコンに搭載されるＣＰＵの動作クロック（数GHz）と比較して遥かに小さい。その上、メモリの量もパソコン等に比べて遥かに少ない。そのため、リソースがある程度必要なコンパイル機能を搭載するには向いていない。
【０００５】
一般的なJavaの高速実行方式としては、Just In Timeコンパイラ方式がある。ただし、この方式はインタプリタで動作させておきつつバックグラウンドでコンパイルしておくという処理が必要となり、ＣＰＵの処理が一般のパソコンのＣＰＵに比べて脆弱なＩＣチップにおいては向いていない。  
【０００６】
インタプリタにおける他の高速実行方式としては、オリジナルバイトコードを定義する方法がある。例えば、特許文献１には、第１のインストラクションと、第２のインストラクションを実行するインタプリタを備えるＩＣカードと、第２のインストラクションを第１のインストラクションに変換するコンバーターを有する端末を備えるＩＣカードシステムが開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第３７６６０５２号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に開示されたような、ＩＣカードに対向する端末においてコンバーターがリナンバリングといった置き換え処理を行うには、実際のユースケースを想定すると十分ではない。例えば、携帯電話機に搭載されるＳＩＭカード等において、決済機能を実現するアプリケーションを、ＳＩＭカードに格納する場合などがある。この場合、アプリケーション、携帯電話機、及びＳＩＭカードなどは、それぞれ別の会社が開発する場合が多い。そのため、アプリケーションに対して、アプリケーションの開発会社や携帯電話機の製造会社における特殊な最適化は望めない。結果として、ＩＣチップが、単体で、インストールされたアプリケーションの解析を行い、最適化する形態が望まれる。ただし、前述のように、従来から広まっているJust In Timeコンパイラ方式では、ＩＣチップのような脆弱なＣＰＵ、少ないリソース環境において、実現が困難である。
【０００９】
そこで、本発明は、上記点に鑑みてなされたものであり、リソースが少ない環境で、アプリケーションを解析、最適化し、パフォーマンスを向上させることが可能な電子情報記憶媒体、アプリケーション置換方法、及びプログラムを提供することを課題とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、請求項１に記載の発明は、アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備える電子情報記憶媒体であって、前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、前記検査命令処理手段により前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段と、を備え、前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、前記不揮発性メモリにおいて当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、前記書換手段は、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第３の命令を示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第３の命令を示す識別番号に書き換えることを特徴とする。
【００１１】
請求項２に記載の発明は、アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備える電子情報記憶媒体であって、前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、前記検査命令処理手段により前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段と、を備え、前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号でないと判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、当該第１の命令を示し且つ検査済であることを示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、前記書換手段は、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第１の命令を示し且つ検査済であることを示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第１の命令を示し且つ検査済であることを示す識別番号に書き換えることを特徴とする。
【００１４】
請求項３に記載の発明は、請求項１または２に記載の電子情報記憶媒体において、前記検査命令処理手段は、前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、前記バッファ領域に空きが有るか否かを判定し、当該バッファ領域に空きが有ると判定した場合、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定することを特徴とする。
【００１５】
請求項４に記載の発明は、請求項２に記載の電子情報記憶媒体において、前記実行手段は、前記アプリケーションの２回目以降の前記処理期間中に取得した前記識別番号が、前記第１の命令を示し且つ検査済であることを示す識別番号であるとき、当該識別番号が示す前記命令に応じた処理を実行し、前記検査命令処理手段は、前記第１の命令と連結させる前記第２の命令を示す識別番号であるか否かの判定を行うことなく、当該実行手段は、次の前記識別番号を取得し当該識別番号が示す前記命令に応じた処理を実行することを特徴とする。
【００１６】
請求項５に記載の発明は、アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備える電子情報記憶媒体に含まれるコンピュータにより実行されるアプリケーション置換方法であって、前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、前記アプリケーション置換方法は、前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理ステップと、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換ステップと、を含み、前記検査命令処理ステップにおいては、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、前記不揮発性メモリにおいて当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、前記書換ステップにおいては、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第３の命令を示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第３の命令を示す識別番号に書き換えることを特徴とする。請求項６に記載の発明は、アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備える電子情報記憶媒体に含まれるコンピュータにより実行されるアプリケーション置換方法であって、前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、前記アプリケーション置換方法は、前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記アプリケーションに記述された複数の前記識別番号のうちから取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理ステップと、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換ステップと、を含み、前記検査命令処理ステップにおいては、前記他の前記識別番号が前記第２の命令を示す識別番号でないと判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、当該第１の命令を示し且つ検査済であることを示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、前記書換ステップにおいては、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第１の命令を示し且つ検査済であることを示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第１の命令を示し且つ検査済であることを示す識別番号に書き換えることをことを特徴とする。
【００１７】
請求項７に記載の発明は、アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、コンピュータとを備える電子情報記憶媒体において前記コンピュータを、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段として機能させるプログラムであって、前記不揮発性メモリは、前記複数種類の命令群の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、前記プログラムは、さらに、前記コンピュータを、前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段として機能させ、前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、前記不揮発性メモリにおいて当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、前記書換手段は、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第３の命令を示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第３の命令を示す識別番号に書き換えることを特徴とする。請求項８に記載の発明は、アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、コンピュータとを備える電子情報記憶媒体において前記コンピュータを、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段として機能させるプログラムであって、前記不揮発性メモリは、前記複数種類の命令群の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、前記プログラムは、さらに、前記コンピュータを、前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段として機能させ、前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号でないと判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、当該第１の命令を示し且つ検査済であることを示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、前記書換手段は、前記電子情報記憶媒体のリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第１の命令を示し且つ検査済であることを示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第１の命令を示し且つ検査済であることを示す識別番号に書き換えることを特徴とする。請求項９に記載の発明は、アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備えるＩＣカードであって、前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、前記検査命令処理手段により前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段と、を備え、前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号であると判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、前記不揮発性メモリにおいて当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、前記書換手段は、前記ＩＣカードのリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第３の命令を示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第３の命令を示す識別番号に書き換えることを特徴とする。請求項１０に記載の発明は、アプリケーション作成のために定義された複数種類の命令の中から選択された複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する不揮発性メモリと、データを一時的に記憶するための揮発性メモリと、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令に応じた処理を実行する実行手段とを備えるＩＣカードであって、前記不揮発性メモリは、前記複数種類の命令の中から検査対象として選定された第１の命令を示す識別番号と、当該第１の命令と連結させる１つ以上の第２の命令を示す識別番号と、前記第１の命令と前記第２の命令とを連結した第３の命令を示す識別番号と、を対応付けて記憶し、前記揮発性メモリには、前記アプリケーション全体のサイズより少ない容量に設定されたバッファ領域が設定されており、前記実行手段が前記アプリケーションから前記識別番号を順次取得し、当該識別番号を取得するごとに当該識別番号が示す前記命令に応じた処理を実行する前記アプリケーションの処理期間中に取得された前記識別番号が、前記第１の命令を示す識別番号であるとき、当該識別番号に対して前記実行順が連続する他の前記識別番号が、当該第１の命令と連結させる前記第２の命令を示す識別番号であるか否かを判定する検査命令処理手段と、前記検査命令処理手段により前記他の前記識別番号が前記第２の命令を示す識別番号であると判定された場合、前記アプリケーションにおいて、前記第１の命令を示す識別番号を、当該第１の命令を示す識別番号及び当該第２の命令を示す識別番号に対応付けられた前記第３の命令を示す識別番号に書き換える書換手段と、を備え、前記検査命令処理手段は、前記他の前記識別番号が前記第２の命令を示す識別番号でないと判定した場合、前記第１の命令を示す識別番号の前記アプリケーションにおける位置を特定可能な特定情報と、当該第１の命令を示し且つ検査済であることを示す識別番号とを前記バッファ領域に書き込み、前記アプリケーションの処理が終了した場合、前記バッファ領域に書き込まれた前記特定情報及び前記識別番号を前記不揮発性メモリにおける所定領域に書き込み、前記書換手段は、前記ＩＣカードのリセットタイミングまたはアプリケーションの起動タイミングで、前記所定領域に書き込まれた前記特定情報及び前記第１の命令を示し且つ検査済であることを示す識別番号に基づいて、前記第１の命令を示す識別番号を、前記第１の命令を示し且つ検査済であることを示す識別番号に書き換えることを特徴とする。
【発明の効果】
【００１８】
本発明によれば、リソースが少ない環境で、アプリケーションを解析、最適化し、パフォーマンスを向上させることができる。
【図面の簡単な説明】
【００１９】
【図１】（Ａ）は、ＩＣチップ１ａのハードウェア構成例を示す図であり、（Ｂ）は、ＩＣチップ１ａの機能ブロック例を示す図である。
【図２】（Ａ）は、連続した命令「SLOAD_0」及び「SLOAD_1」に応じた処理の内容の一例を示す図であり、（Ｂ）は、「SLOAD_0」と「SLOAD_1」とを連結した特殊命令「SLOAD_0_1」に応じた処理の内容の一例を示す図である。
【図３】（Ａ）は、連続した命令「SLOAD_0」及び「IFNE」に応じた処理の内容の一例を示す図であり、（Ｂ）は、「SLOAD_0」と「IFNE」とを連結した特殊命令「SLOAD_0_IFNE」に応じた処理の内容の一例を示す図である。
【図４】（Ａ）は、検査命令を示すバイトコードと、非検査命令を示すバイトコードと、特殊命令を示すバイトコードと、を対応付けて保持するテーブルの一例を示す図であり、（Ｂ）は、ＲＡＭのバッファ領域を示す概念図である。
【図５】（Ａ）は、アプリケーションの処理期間中に実行される検査命令処理の一例を示すフローチャートであり、（Ｂ）は、アプリケーションの処理が終了した後、ＩＣチップ１ａのリセットタイミングまたはアプリケーションの起動タイミングで実行される置換処理の一例を示すフローチャートである。
【図６】検査命令を示すバイトコードが置換される前と後のアプリケーションを示す概念図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照して本発明の実施形態について詳細に説明する。先ず、図１等を参照して、ＩＣカード１に搭載されたＩＣチップ１ａの概要構成及び機能について説明する。図１（Ａ）は、ＩＣチップ１ａのハードウェア構成例を示す図であり、図１（Ｂ）は、ＩＣチップ１ａの機能ブロック例を示す図である。なお、ＩＣカード１は、キャッシュカード、クレジットカード、社員カード等として使用される。或いは、ＩＣカード１は、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣチップ１ａは本発明における電子情報記憶媒体を構成するが、この電子情報記憶媒体は通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００２１】
図１（Ａ）に示すように、ＩＣチップ１ａは、ＣＰＵ（Central Processing Unit）１０、ＲＯＭ（Read Only Memory）１１、データを一時的に記憶するための揮発性メモリであるＲＡＭ（Random Access Memory）１２、不揮発性メモリであるフラッシュメモリ１３、及びＩ／Ｏ回路１４を備えて構成される。なお、フラッシュメモリの代わりに「Electrically Erasable Programmable Read-Only Memory」であっても構わない。Ｉ／Ｏ回路１４は、外部端末２とのインターフェイスを担う。これにより、ＩＣチップ１ａは、ＩＣリーダ・ライタを備える外部端末２との間で接触または非接触で通信を行うことができる。接触式のＩＣチップ１ａの場合、Ｉ／Ｏ回路１４には、例えば、Ｃ１〜Ｃ８の８個の端子が備えられている。例えば、Ｃ１端子は電源端子（ＩＣチップ１ａへ電源供給する端子）、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部端末２との間で通信を行うための端子である。一方、非接触式のＩＣチップ１ａの場合、Ｉ／Ｏ回路１４には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部端末２の例としては、ＩＣカード発行機、ＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣチップ１ａが通信機器に組み込まれる場合、外部端末２には通信機器の機能を担う制御部が該当する。
【００２２】
ＣＰＵ１０は、コンピュータの一例であり、図１（Ｂ）に示すハードウェアとして、フラッシュメモリ１３に記憶された各種プログラムを実行する演算装置である。各種プログラムには、ＯＳ（Operating System）、仮想マシンプログラム、Java（登録商標）等のプログラム言語で記述されるアプリケーションが含まれる。ＯＳ、及び仮想マシンプログラムは、複数のネイティブコード（実行コード群）で記述される。ＯＳは、ＩＣチップ１ａの動作を直接コントロールするソフトウェアであり、ＲＯＭ１１に記憶されてもよい。
【００２３】
仮想マシンプログラムは、ＣＰＵ１０を仮想マシン（本発明の実行手段の一例）として機能させるプログラムである。ＯＳ上で動作する仮想マシンは、ソースコードとネイティブコードとの間の中間コードであるバイトコード（識別番号の一例、インデックスともいう）を解釈、実行する。バイトコードは、例えばJava（登録商標）の場合、１バイトで構成される。このため、定義可能な命令（言い換えれば、バイトコード）は、２５５種類となるが、実際には、約２００種類の命令が定義されており、その他は未定義になっている。命令は、例えば、「SLOAD_0」、「SLOAD_1」、「BSPUSH」、「INVOKESPECIAL」、「GOTO」というように、人間に理解容易なソースコードで表される。このような命令は、アプリケーション作成のために定義された（サポートされている）複数種類の命令の中から、プログラマーによって選択、使用される。プログラマーにより作成されたアプリケーションには、上述したソースコードが例えば実行順に記述される。そして、このようなアプリケーションは、コンパイラによって仮想マシンの実行形式に変換（つまり、ソースコードからバイトコードに変換）され、インストール（フラッシュメモリ１３に記憶）されることになる。このため、フラッシュメモリ１３に記憶されているアプリケーションは、複数の命令それぞれを示すバイトコードを例えば実行順に記述する。
【００２４】
仮想マシンは、アプリケーションに記述されたバイトコードを実行順に取得し、該取得したバイトコードを解釈して当該バイトコードが示す命令に応じた処理を実行する。バイトコードが示す命令に応じた処理の内容（処理プログラム）は、仮想マシンプログラムに規定されている。また、仮想マシンは、アプリケーションに記述された複数のバイトコードのうち、次に実行するべきバイトコードの位置（アプリケーションにおける位置）を特定可能な特定情報を指し示すプログラムカウンタを備える。ここで、特定情報の例として、バイトコードのアドレス（バイトコードが記憶されたフラッシュメモリ１３におけるアドレス）、バイトコードのオフセット、バイトコードのラベル値が挙げられる。例えば、公知のComputed gotoアルゴリズムでは、GNU C対応の拡張機能であるlabel as valueにより、ラベル値としてのアドレスに直接ジャンプすることができる。
【００２５】
本実施形態では、従来、上述した複数種類の命令の中に定義されていなかった新たな命令を特殊命令（第３の命令の一例）として定義する。この特殊命令は、上述した複数種類の命令の中に定義されていた既存の複数の命令を連結した命令である。連結される命令の組み合わせは、例えば一般的なアプリケーションにおいて実行順が連続する命令の組合せの出現頻度等に基づき、例えばＩＣチップの発行元等により選定される。特殊命令の例として、「SLOAD_0」と「SLOAD_1」とを連結した特殊命令（「SLOAD_0_1」と新たに定義）、および、「SLOAD_0」と「IFNE」とを連結した特殊命令（「SLOAD_0_IFNE」と新たに定義）などが挙げられる。また、特殊命令には、上述した複数種類の命令の中に定義されていた既存の命令を示すバイトコードとは重複しないバイトコード（例えば、２５５種類のバイトコードのうち、未定義のバイトコード）が割り当てられ、当該割り当てられたバイトコードは、当該特殊命令を示すことになる。また、特殊命令に応じた処理の内容（特殊命令処理プログラム）は、上述した仮想マシンプログラムに予め規定される（つまり、仮想マシンに、特殊命令に応じた処理内容が組み込まれる）。
【００２６】
ここで、特殊命令に応じた処理は、例えば、データの読み出し、データの書き込み、プログラムカウンタの更新、次の命令へのジャンプなどを簡略化した処理である。また、特殊命令に応じた処理は、少なくとも連結された各命令を示すバイトコードがもともと更新していたプログラムカウンタの数だけ更新を行う処理を有する。例えば、命令Ａを示すバイトコードで１、命令Ｂを示すバイトコードで２、プログラムカウンタを更新していた場合、命令Ａと命令Ｂとを連結した特殊命令ＡＢを示すバイトコードでは、プログラムカウンタが３だけ更新される。図２（Ａ）は、連続した命令「SLOAD_0」及び「SLOAD_1」に応じた処理の内容の一例を示す図であり、図２（Ｂ）は、「SLOAD_0」と「SLOAD_1」とを連結した特殊命令「SLOAD_0_1」に応じた処理の内容の一例を示す図である。図３（Ａ）は、連続した命令「SLOAD_0」及び「IFNE」に応じた処理の内容の一例を示す図であり、図３（Ｂ）は、「SLOAD_0」と「IFNE」とを連結した特殊命令「SLOAD_0_IFNE」に応じた処理の内容の一例を示す図である。図２及び図３に示すように、連結後の処理の内容（図２（Ｂ）と図３（Ｂ））は、連結前の処理の内容（図２（Ａ）と図３（Ａ））に比べて処理手順が簡略化（最適化）されているものの、処理結果は同様になる。つまり、特殊命令では、複数の命令を１つの命令として処理しており、高速処理が可能となる。
【００２７】
本実施形態では、処理手順の簡略化（最適化）を実現するために、上述した複数種類の命令の中から検査対象として選定された検査命令（第１の命令の一例）を示すバイトコードと、当該検査命令と連結させる１つ以上の非検査命令（第２の命令の一例）を示すバイトコードと、検査命令と非検査命令とを連結した特殊命令を示すバイトコードと、が対応付けられてフラッシュメモリ１３に記憶される。図４（Ａ）は、検査命令を示すバイトコードと、非検査命令を示すバイトコードと、特殊命令を示すバイトコードと、を対応付けて保持するテーブルの一例を示す図である。図４（Ａ）の例では、１つの検査命令に対して、連結させる命令が複数ある場合を示している。なお、このようなテーブルには、それぞれのバイトコードの代わりに、バイトコードのアドレスやラベル値が識別番号として保持されるように構成してもよい。
【００２８】
更に、フラッシュメモリ１３には、アプリケーションに記述された複数のバイトコードのうちから、上記検査命令が取得されたときの検査命令処理を規定する検査命令処理プログラム、及び検査命令の置換処理を規定する置換処理プログラムが記憶される。検査命令処理プログラム、及び置換処理プログラムは、アプリケーションの最適化を図るためのプログラムであり、ＣＰＵ１０を、検査命令処理部（本発明における検査命令処理手段の一例）、及び置換部（本発明における書換手段の一例）として機能させるプログラムである。なお、検査命令処理部及び置換部は、仮想マシンに備えられてもよい。フラッシュメモリ１３に記憶されているアプリケーションに記述された複数のバイトコードのうちから取得された（読み出された）バイトコードが、検査命令を示すバイトコードであるとき、ＣＰＵ１０は、検査命令処理を実行することにより、当該検査命令を示すバイトコードに対して実行順が連続する他のバイトコードが、当該検査命令と連結させる非検査命令を示すバイトコードであるか否かを、例えばテーブルを参照することにより判定する。そして、上記他のバイトコードが非検査命令を示すバイトコードであると判定された場合、ＣＰＵ１０は、置換処理を実行することにより、上記アプリケーションにおいて、当該検査命令を示すバイトコードを、例えば図４（Ａ）に示すように、当該検査命令を示すバイトコード及び当該非検査命令を示すバイトコードに対応付けられた特殊命令を示すバイトコードに書き換える。
【００２９】
一方、上記他のバイトコードが非検査命令を示すバイトコードでないと判定された場合、ＣＰＵ１０は、置換処理を実行することにより、上記アプリケーションにおいて、当該検査命令を示すバイトコードを、当該検査済み命令を示すバイトコードに書き換える。ここで、検査済み命令を示すバイトコードとは、上記取得された検査命令を示し且つ検査済であることを示すバイトコードであることを意味する。検査済み命令を示すバイトコードは、特殊命令を示すバイトコードと同様、上述した複数種類の命令の中に定義されていた既存の命令を示すバイトコードとは重複しないバイトコードである。また、検査済み命令に応じた処理の内容は、これに対応する検査命令に応じた処理の内容と同一である。ただし、アプリケーションに記述された複数のバイトコードのうちから取得したバイトコードが、検査済み命令を示すバイトコードであるとき、検査済であるため、検査命令処理プログラムが実行されない（つまり、当該処理に応じた通常の処理が行われるだけとなる）。
【００３０】
なお、検査命令処理は、アプリケーションの処理期間外に実行されてもよいが、アプリケーションの処理期間中（つまり、アプリケーション実行中）に実行されることが望ましい。ここで、アプリケーションの処理期間とは、仮想マシンが例えば外部端末２から受信されたコマンドに応じて、アプリケーションからバイトコードを順次取得し当該バイトコードを取得するごとに当該バイトコードが示す命令に応じた処理を実行する期間をいう。検査命令処理がアプリケーションの処理期間中に実行される場合、ＲＡＭには、アプリケーション全体のサイズより少ない容量（バッファサイズ）に設定されたバッファ領域が設定される。なお、バッファ領域の容量は、アプリケーションのユーザによって任意に設定可能としてもよい。
【００３１】
図４（Ｂ）は、ＲＡＭのバッファ領域を示す概念図である。図４（Ｂ）に示す例では、バッファ領域には、検査命令を示すバイトコードのアドレスと特殊命令を示すバイトコードとの組（セット）、及び検査命令を示すバイトコードのアドレスと検査済み命令を示すバイトコードとの組が書き込まれている。なお、バイトコードのアドレスの代わりに、バイトコードのラベル値が書き込まれてもよい。検査命令処理において、検査命令を示すバイトコードに対して実行順が連続する他のバイトコードが、検査命令と連結させる非検査命令を示すバイトコードであると判定された場合、当該検査命令を示すバイトコードのアドレスと特殊命令を示すバイトコードとの組がバッファ領域に書き込まれる。一方、検査命令処理において、検査命令を示すバイトコードに対して実行順が連続する他のバイトコードが、当該検査命令と連結させる非検査命令を示すバイトコードでないと判定された場合、当該検査命令を示すバイトコードのアドレスと検査済み命令を示すバイトコードとの組がバッファ領域に書き込まれる。このようにバッファ領域に書き込まれたデータは、置換処理で用いられる。
【００３２】
次に、図５を参照して、ＩＣチップ１ａの動作について説明する。図５（Ａ）は、アプリケーションの処理期間中に実行される検査命令処理の一例を示すフローチャートである。図５（Ｂ）は、アプリケーションの処理が終了した後、ＩＣチップ１ａのリセットタイミングまたはアプリケーションの起動タイミングで実行される置換処理の一例を示すフローチャートである。例えば、外部端末２からコマンドが受信されると、アプリケーションが起動してアプリケーションの処理が開始される。このとき、バッファ領域が初期化される。これにより、バッファ領域は、空き状態（例えば、全てFFの状態、或いは全て00の状態）となる。また、アプリケーションの処理が開始されると、図４（Ａ）に示すようなテーブルがフラッシュメモリ１３から読み出されＲＡＭのワーク領域に記憶される。
【００３３】
そして、アプリケーションの処理期間中（つまり、アプリケーション実行中）に、仮想マシンは、プログラムカウンタが指し示す特定情報（例えばアドレス）に従って、バイトコードをアプリケーションから取得し（例えばフラッシュメモリ１３またはＲＡＭから読み出し）、当該取得したバイトコードが、検査命令を示すバイトコード（つまり、テーブルに記憶される検査命令を示すバイトコード）であるとき、ＣＰＵ１０は、図５（Ａ）に示す検査命令処理を開始する。一方、取得したバイトコードが、検査命令を示すバイトコードでない場合、仮想マシンは、当該バイトコードが示す命令に応じた処理（通常の処理）を実行する。
【００３４】
図５（Ａ）に示す検査命令処理では、仮想マシンは、当該検査命令を示すバイトコードが示す命令に応じた処理を実行する（ステップＳ１）。次いで、検査命令処理部は、バッファ領域に空きが有るか否かを判定する（ステップＳ２）。例えば、当該検査命令を示すバイトを示すバイトコードのアドレスと特殊命令を示すバイトコード（または検査済み命令を示すバイトコード）との組分のデータ量以上の空き容量がバッファ領域にある場合、バッファ領域に空きが有ると判定される。検査命令処理部は、バッファ領域に空きが有ると判定した場合（ステップＳ２：ＹＥＳ）、ステップＳ３へ進む。一方、検査命令処理部は、バッファ領域に空きが無いと判定した場合（ステップＳ２：ＮＯ）、当該検査命令処理を終了する。これにより、プログラムカウンタが進められて次のバイトコードの処理へ進む。
【００３５】
ステップＳ３では、検査命令処理部は、プログラムカウンタに基づき前後のバイトコードを確認する。そして、検査命令処理部は、当該検査命令を示すバイトコードに対して実行順が連続する他のバイトコードが、当該検査命令と連結させる非検査命令を示すバイトコードであるか否かを判定する（ステップＳ４）。例えば、現在のプログラムカウンタが示す特定情報の直前または直後の特定情報により特定されたバイトコードが、上記検査命令と連結させる非検査命令を示すバイトコードとして上記テーブルで対応付けられている場合、当該検査命令と連結させる非検査命令を示すバイトコードであると判定される。
【００３６】
検査命令処理部は、当該検査命令を示すバイトコードに対して実行順が連続する他のバイトコードが、当該検査命令と連結させる非検査命令を示すバイトコードであると判定した場合（ステップＳ４：ＹＥＳ）、当該検査命令を示すバイトコードのアドレスと、上記テーブルにおいて当該検査命令を示すバイトコード及び当該非検査命令を示すバイトコードに対応付けられた特殊命令を示すバイトコードとをバッファ領域に書き込み（つまり、アドレスとバイトコードの組を格納し）（ステップＳ５）、当該検査命令処理を終了する。これにより、プログラムカウンタが進められて次のバイトコードの処理へ進める。なお、バイトコードのアドレスの代わりに、バイトコードのラベル値が書き込まれてもよい。
【００３７】
一方、検査命令処理部は、当該検査命令を示すバイトコードに対して実行順が連続する他のバイトコードが、当該検査命令と連結させる非検査命令を示すバイトコードでないと判定した場合（ステップＳ４：ＮＯ）、当該検査命令を示すバイトコードのアドレスと、検査済み命令を示すバイトコードとをバッファ領域に書き込み（ステップＳ６）、当該検査命令処理を終了する。これにより、プログラムカウンタが進められ、次のバイトコードの処理へ進む。
【００３８】
以上のようにして、図５（Ａ）に示す検査命令処理は、検査命令を示すバイトコードが読み出される度に実行されることになる。そして、上記アプリケーションの処理が終了した場合、検査命令処理部は、上記ステップＳ５またはステップＳ６でバッファ領域に書き込まれた、検査命令を示すバイトコードのアドレス及び特殊命令を示すバイトコード（または、検査済み命令を示すバイトコード）の組をフラッシュメモリ１３における一時保存領域（所定領域の一例）に書き込む。これは、ＩＣカード１ａへの電源供給断になった場合でも、アドレスとバイトコードの組が消去しないようにするためである。
【００３９】
当該アドレスとバイトコードの組の一時保存領域への書き込み後、ＣＰＵ１０は、ＩＣカード１ａのリセットタイミングまたはアプリケーションの起動タイミングで、図５（Ｂ）に示す置換処理を開始する。図５（Ｂ）に示す置換処理では、置換部は、フラッシュメモリ１３における一時保存領域を確認し（ステップＳ１１）、当該一時保存領域が全て空き状態であるか否かを判定する（ステップＳ１２）。例えば一時保存領域が全てFFの状態、或いは全て00の状態である場合、当該一時保存領域が全て空き状態であると判定される。置換部は、当該一時保存領域が全て空き状態であると判定した場合（ステップＳ１２：ＹＥＳ）、当該置換処理を終了する。一方、置換部は、当該一時保存領域が全て空き状態でないと判定した場合（ステップＳ１２：ＮＯ）、ステップＳ１３へ進む。
【００４０】
ステップＳ１３では、置換部は、当該一時保存領域に書き込まれている検査命令を示すバイトコードのアドレス及び特殊命令を示すバイトコード（または、検査済み命令を示すバイトコード）に基づいて、検査命令を示すバイトコードを、特殊命令を示すバイトコード（または、検査済み命令を示すバイトコード）に書き換える。つまり、検査命令を示すバイトコードのアドレスに基づいて、当該検査命令を示すバイトコードのアプリケーションにおける位置が特定され、特定された位置に特殊命令を示すバイトコード（または、検査済み命令を示すバイトコード）が書き込まれる（フラッシュメモリ１３に書き込まれる）ことで検査命令を示すバイトコードが書き換えられる。次いで、置換部は、消去処理を行って一時保存領域を空き状態にし（ステップＳ１４）、当該置換処理を終了する。
【００４１】
図６は、検査命令を示すバイトコードが置換される前と後のアプリケーションを示す概念図である。図６の例では、説明の便宜上、ソースコードで記述されているが、実際にはバイトコードで記述される。図６（Ａ）の例は、初期（インストール時）のアプリケーションを示し、図６（Ｂ）の例は、１回目の実行後のアプリケーションを示し、図６（Ｃ）の例は、２回目の実行後のアプリケーションを示す。図６（Ａ），（Ｂ）に示すように、初期に対して１回目の実行後のアプリケーションでは、１番目の検査命令（SLOAD_0）が特殊命令（SLOAD_0_1）に置き換えられており（５１部）、２番目の検査命令（SLOAD_0）が検査済み命令（SLOAD_0_inspected）に置き換えられている（５２部）。これは、上述したようにバッファ領域の上限サイズが設定されているため、当該アプリケーションの１回目の実行では、１番目と２番目の検査命令に係る２組分のデータがバッファ領域に書き込まれることで３番目以降の検査命令が取得されたときには、バッファ領域に空きが無い（ステップＳ２：ＮＯ）と判定されるためである。このため、図６（Ｂ），（Ｃ）に示すように、１回目の実行後に対して２回目の実行後のアプリケーションでは、３番目の検査命令（SLOAD_0）が特殊命令（SLOAD_0_1）に置き換えられており（５３部）、４番目の検査命令（SLOAD_0）が検査済み命令（SLOAD_0_inspected）に置き換えられている（５４部）。このようにバッファ領域の上限サイズを設定することで、一度に置き換える上限値を定め、また、リセットの直後といったタイミングで更新することにより、１つのアプリケーションに検査命令が集中していた場合であっても、アプリケーションの実行処理速度が遅くなることを回避し、ＩＣチップ１ａにおけるコマンド処理を迅速に実行させることができるとともに、アプリカーションが実行される度に特殊命令が増えていくので、アプリケーションが実行される回数に応じてアプリケーションの実行処理速度を速くしていくことができる。ただし、例えば、アプリケーションの実行処理速度が要求されない環境においては、バッファ領域を設けずに、逐次、バイトコードを置き換えるように構成しても構わない。
【００４２】
また、図６（Ｂ），（Ｃ）に示すように、検査命令（SLOAD_0）と連続した非検査命令（SLOAD_1）はアプリケーションに残っている。しかし、この非検査命令（SLOAD_1）は、上述したように、当該特殊命令のプログラムカウンタ更新の際に飛ばされるため、以降読み出されることは無い。なお、アプリケーションにおいて読み出されなくなった命令を詰めることも可能ではあるが、上述した本実施形態によれば、当該命令を詰める処理及びメソッドのサイズを減らす処理などの書き込み処理を低減でき、その結果、処理時間を低減し、書き込み保証機能(Transaction)のバッファサイズを低減することができる。
【００４３】
また、図６（Ｂ），（Ｃ）に示すように、検査命令（SLOAD_0）が特殊命令（SLOAD_0_1）に置き換えられなくとも、検査済み命令（SLOAD_0_inspected）に置き換えることにより、当該アプリケーションの２回目以降の実行中に取得されたバイトコードが、検査済み命令を示すバイトコードであるとき、当該検査済み命令に応じた通常の処理が実行されるが、検査命令と連結させる非検査命令を示すバイトコードであるか否かの判定が行われることなく、次の命令に応じた処理に移行される。このため、重複した置換処理が行われることを回避することができる。
【００４４】
以上説明したように、上記実施形態によれば、ＩＣチップ１ａは、インストールされたアプリケーションに記述された複数のバイトコードのうちから取得されたバイトコードが、検査命令を示すバイトコードであるとき、当該バイトコードに対して実行順が連続する他のバイトコードが、当該検査命令と連結させる非検査命令を示すバイトコードであるか否かを判定し、他のバイトコードが当該非検査命令を示すバイトコードである場合、当該アプリケーションにおいて、当該検査命令を示すバイトコードを、当該検査命令を示すバイトコード及び当該非検査命令を示すバイトコードに対応付けられた特殊命令を示すバイトコードに書き換えるように構成したので、リソースが少ない環境で、アプリケーションを解析、最適化し、パフォーマンスを向上させることができる。また、図５（Ａ）を用いて説明したように検査命令処理をアプリケーションの処理期間中（つまり、アプリケーション実行中）に実行するように構成することで、動的に効率良くアプリケーションを最適化することができる。
【符号の説明】
【００４５】
１  ＩＣカード
２  外部端末
１ａ  ＩＣチップ
１０  ＣＰＵ
１１  ＲＯＭ
１２  ＲＡＭ
１３  フラッシュメモリ
１４  Ｉ／Ｏ回路
【図１】
0006447219.tif 000002
【図２】
0006447219.tif 000003
【図３】
0006447219.tif 000004
【図４】
0006447219.tif 000005
【図５】
0006447219.tif 000006
【図６】
0006447219.tif 000007