(57)【要約】【課題】プラットフォームのＳＬＬを利用する仮想マシン上のソフトウェアについて、ＳＬＬを利用中のソフトウェアの更新、又はＳＬＬを利用すべきソフトウェアの変更が発生した場合でも、ファームウェアの更新を行うことなく、当該ＳＬＬを利用する更新又は変更後のソフトウェアの起動を可能とする。【解決手段】ソフトウェア２１が、自己に関連した依存関係の更新の際、自己で参照中のＳＬＬ１１用に確保されたメモリのネイティブ領域を解放させるメモリ掃除機能２７を含む。また、依存関係の更新の際にガベージコレクタを制御バンドル２４によって強制起動させる。【選択図】図１
2015215657.tif 000002
【特許請求の範囲】
【請求項１】
スタティックリンクライブラリを含むプラットフォームと、当該プラットフォーム上に構築された仮想マシンと、当該仮想マシン上で動作し、前記スタティックリンクライブラリを利用するソフトウェアとを備える通信機器において、
前記ソフトウェアが、自己に関連した依存関係の更新の際、自己で参照中の前記スタティックリンクライブラリ用に確保されたメモリのネイティブ領域を解放させるメモリ掃除機能を含むことを特徴とする通信機器。
【請求項２】
前記メモリ掃除機能は、前記ソフトウェアにロード又は起動命令が与えられた場合、当該ソフトウェアによって利用される前記スタティックリンクライブラリの読込成功まで、当該スタティックリンクライブラリ用に確保されるべき前記メモリのネイティブ領域を解放させる処理を繰り返す請求項１に記載の通信機器。
【請求項３】
前記依存関係の更新の際に、前記仮想マシンのガベージコレクタを強制起動させる制御手段を備える請求項１又は２に記載の通信機器。
【請求項４】
前記依存関係の更新の際に、前記仮想マシンのガベージコレクタを強制起動させる制御手段と、前記仮想マシンで起動すべきソフトウェアが規定された一覧とを備え、
前記制御手段は、前記強制起動の実施後に前記仮想マシンの処理対象になっている各ソフトウェアのライフサイクル状況を取得し、前記一覧及び当該取得したライフサイクル状況間の一致性を判断する処理を、当該判断結果が一致になるまで繰り返す請求項３に記載の通信機器。
【請求項５】
スタティックリンクライブラリを含むプラットフォーム上に仮想マシンが構築されたコンピュータに実行させるプログラムにおいて、
前記仮想マシン上で動作するソフトウェアに含まれており、かつ当該ソフトウェアに対して削除又は停止の命令が与えられたことを契機として、当該ソフトウェアで参照中の前記スタティックリンクライブラリ用に確保されたメモリのネイティブ領域を解放させるメモリ掃除手順を前記コンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プラットフォームのスタティックリンクライブラリを仮想マシン上のソフトウェアから利用可能なコンピュータを備える通信機器、及び当該コンピュータで実行されるプログラムに関する。
【背景技術】
【０００２】
近年、ホームゲートウェイ（HGW）のような通信機器においても、Ｊａｖａ（登録商標）仮想マシン（Java virtual machine：JVM）機能が搭載されるようになっている。このＪＶＭでは、Ｊａｖａ領域のアプリケーションソフトウェアであるバンドルが、ネイティブ（Native）領域のライブラリを利用（JNI機能）して様々な機能を提供する。
【０００３】
動的に複数のバンドルからライブラリを参照可能なダイナミックリンクライブラリ（DLL）に対応した通信機器では、常駐的な監視モジュールによって適切なタイミングでメモリ解放が自動的に実行されるようになっている（例えば、特許文献１、２）。
【０００４】
通信機器に備わるコンピュータは、通信処理のために中央演算処理装置（ＣＰＵ）のリソースを消費する。限られたられたＣＰＵリソースを保証するため、機種によっては、ＤＬＬを採用せず、ライブラリを利用するバンドルが常に一意に決まるスタティックリンクライブラリ（Static Link Library：SLL）を採用しているものがある。ＳＬＬでは、ネイティブ領域において常に固定的なソフトウェアからのライブラリ利用が保証されるので、動的にメモリ解放を実施する等の管理を行う必要がなく、ＣＰＵ等のリソース消費を抑えることが可能となる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−３４１９６８号公報
【特許文献２】特開２００９−３７３５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、一度、ＳＬＬが利用中になると、当該ＳＬＬのために確保されているメモリ領域を動的に解放することがない。このため、ＳＬＬを利用中の既存バンドルに代えて別バンドルに当該ＳＬＬを利用させたいときであっても、既に利用中であるため、拒否される。このような状況に加え、ライブラリを参照しているバンドル自体の動作、例えば既存バンドルに更新が入った場合や、バンドル間の依存関係の更新が発生してバンドルのライフサイクル状況が変化した場合（起動状態から停止し再度起動するなど）、更新前のバンドル・当該ＳＬＬの利用関係を示す情報がメモリ領域に残っているので、更新後のバンドルは、当該ＳＬＬ用にメモリ確保できず、当該ＳＬＬを利用できない。このため、サービス継続不可な状況に陥る。
【０００７】
この状況に陥ることを避けるため、従来、バンドルの依存関係を更新する際には通信機器自体の再起動等を実施し、バンドル自体の更新が入った場合にはバンドル自体を内包するプラットフォームのファームウェア自体の更新を実施する必要があった。また、ファームウェア自体の更新が実施できない場合、ライブラリを利用するバンドルについて更新やライフサイクル制御を対象外として、これら処理を行わないようにしていた。
【０００８】
バンドルをＤＬＬ前提にすると、ＤＬＬ非対応の通信機器を使用する既存ユーザを切り捨てることになり、現実的でない。
【０００９】
上述の背景に鑑み、この発明が解決しようとする課題は、プラットフォームのＳＬＬを利用する仮想マシン上のソフトウェアについて、ＳＬＬを利用中のソフトウェアの更新、又はＳＬＬを利用すべきソフトウェアの変更が発生した場合でも、ファームウェアの更新を行うことなく、当該ＳＬＬを利用する更新又は変更後のソフトウェアの起動を可能とすることである。
【課題を解決するための手段】
【００１０】
上記の課題を解決するため、この発明は、スタティックリンクライブラリ（SLL）を含むプラットフォームと、当該プラットフォーム上に構築された仮想マシンと、当該仮想マシン上で動作し、前記スタティックリンクライブラリを利用するソフトウェアとを備える通信機器において、前記ソフトウェアが、自己に関連した依存関係の更新の際、自己で参照中の前記スタティックリンクライブラリ用に確保されたメモリのネイティブ領域を解放させるメモリ掃除機能を含む構成を採用した。
【００１１】
仮想マシンでは、利用中のソフトウェアの更新や利用すべきソフトウェアの変更のために依存関係の更新を行う際、当該ソフトウェアに対し、停止や再度起動が命令されることになる。当該ソフトウェアに含まれたメモリ掃除機能によれば、当該命令が与えられたことを契機として、参照中に係るメモリのネイティブ領域を解放させるための命令を出すことが可能である。このように、参照を削除すべきソフトウェア側からプラットフォーム側に対して明示的にメモリ解放させると、ＤＬＬのような常駐的な監視モジュールのような重いリソース負担にならず、ファームウェアの更新を行うことなく、当該スタティックリンクライブラリを新たなソフトウェアから参照可能な状態となる。すなわち、ＳＬＬを利用中のソフトウェアの更新、又はＳＬＬを利用すべきソフトウェアの変更が発生した場合でも、ファームウェアの更新を行うことなく、当該ＳＬＬを利用する更新又は変更後のソフトウェアの起動が可能になる。また、依存関係の更新の際に必ず発生する一時的なサービス停止時期に合わせてメモリ解決処理を行うことができ、当該処理による新たな一時的サービル停止が発生しない利点もある。
【００１２】
この発明は、スタティックリンクライブラリを含むプラットフォーム上に仮想マシンが構築されたコンピュータに実行させるプログラムにおいて、前記仮想マシン上で動作するソフトウェアに含まれており、かつ当該ソフトウェアに対して削除又は停止の命令が与えられたことを契機として、当該ソフトウェアで参照中の前記スタティックリンクライブラリ用に確保されたメモリのネイティブ領域を解放させるメモリ掃除手順を前記コンピュータに実行させる構成を採用することによって実現することができる。
【発明の効果】
【００１３】
上述のように、この発明は、上記構成の採用により、プラットフォームのＳＬＬを利用する仮想マシン上のソフトウェアについて、ＳＬＬを利用中のソフトウェアの更新、又はＳＬＬを利用すべきソフトウェアの変更が発生した場合でも、ファームウェアの更新を行うことなく、当該ＳＬＬを利用する更新又は変更後のソフトウェアの起動を可能とすることができる。
【図面の簡単な説明】
【００１４】
【図１】この発明に係る実施例においてＳＬＬを利用するバンドルに関連した依存関係の更新処理例の概要を示すシーケンス図
【図２】実施例に係る通信機器のプログラム実行環境を示す概念図
【図３】実施例のライブラリ一覧テーブルの構造を示す概念図
【図４】実施例の起動バンドル一覧の構造を示す概念図
【図５】実施例の制御バンドルの処理内容を示すフローチャート
【図６】実施例のメモリ掃除機能の処理内容を示すフローチャート
【図７】実施例のメモリ管理モジュールの処理内容を示すフローチャート
【図８】図１の動作の依存関係更新の想定例を示す概念図
【発明を実施するための形態】
【００１５】
第１実施形態は、前記メモリ掃除機能をより具体化したものである。すなわち、第１実施形態において、メモリ掃除機能は、前記ソフトウェアにロード又は起動命令が与えられた場合、当該ソフトウェアによって利用される前記スタティックリンクライブラリの読込成功まで、当該スタティックリンクライブラリ用に確保されるべき前記メモリのネイティブ領域を解放させる処理を繰り返す。
【００１６】
前記メモリのネイティブ領域解放が失敗することは稀だが、もし失敗した場合、前記更新又は変更後のソフトウェアの起動失敗に直結する。第１実施形態は、ソフトウェアが依存関係の更新によってＳＬＬの新たな結合相手となった場合（すなわち、前記更新又は変更後のソフトウェアとなる場合）、更新前のネイティブ領域解放が失敗していても、当該ソフトウェアのメモリ掃除機能が当該ＳＬＬの読込に成功するまでＳＬＬ用に確保すべきメモリのネイティブ領域解放を行うため、当該ソフトウェアを確実に起動することが可能となる。
【００１７】
この発明の第２実施形態に係る通信機器は、前記依存関係の更新の際に、前記仮想マシンのガベージコレクタを起動させる制御手段を備える。
【００１８】
前記メモリのネイティブ領域解放により、前記依存関係の更新前におけるソフトウェアの参照がなくなっても、メモリの仮想マシン固有領域には、当該更新前のソフトウェアで作成されたオブジェクトが残ることがある。この不要なオブジェクトは、一般に、仮想マシン上で動作するガベージコレクタにより自動的に削除されるが、ガベージコレクタの動作は、リソース負担が大きく、削除タイミングは、ガベージコレクタ自体の仕様に依存する。第２実施形態は、当該更新に伴うサービス停止によってリソースに余裕ができたタイミングでガベージコレクタを起動させることができる。ひいては、可及的速やかにメモリの仮想マシン固有領域から不要なオブジェクトを削除し、当該領域でのメモリ不足によって前記更新又は変更後のソフトウェアの起動ができない事態を防ぐことができる。
【００１９】
第３実施形態は、前記第２実施形態をより具体化したものである。すなわち、第３実施形態に係る通信機器は、前記仮想マシンで起動すべきソフトウェアが規定された一覧を備える。また、前記制御手段は、前記強制起動の実施後に前記仮想マシンの処理対象になっている各ソフトウェアのライフサイクル状況を取得し、前記一覧及び当該取得したライフサイクル状況間の一致性を判断する処理を、当該判断結果が一致になるまで繰り返す。
【００２０】
一般に、仮想マシンは、仮想マシン上で動作する各ソフトウェアのライフサイクルを管理するため、ライフサイクル状況の取得機能を有する。仮想マシンで起動すべきソフトウェアが規定された一覧と、取得したライフサイクル状況で起動中のものとが不一致の場合、ガベージコレクションの失敗及び前述のメモリ不足が重なり、前記更新でＳＬＬの新たな結合相手と定まったソフトウェア、すなわち前記更新又は変更後のソフトウェアの起動に失敗したことになる。一方、一致している場合、起動に成功したことになる。第３実施形態は、当該判断結果が一致になるまでガベージコレクタを強制起動するので、前述のメモリ不足による起動失敗を確実に防止することができる。なお、第２又は第３実施形態は、第１実施形態と組み合わせて採用することができる。
【実施例】
【００２１】
以下、この発明の一実施例に係る通信機器を説明する。図２に示す通信機器１は、エンドユーザ宅に設置されるホームゲートウェイ（Home-Gateway：ＨＧＷ）として構成されている。通信機器１には、ＬＡＮ（Local Area Network）とＷＡＮ（Wide Area Network）とを相互接続するルータとしての機能の他に、例えば、ＩＰ（Internet Protocol）電話サービスの加入者側対応装置として各種呼制御に関する諸機能、ＶＰＮ（Virtual Private Network）機能、Ｊａｖａ（登録商標）機能などが搭載される。
【００２２】
通信機器１は、１つ以上のスタティックリンクライブラリ１１を含むプラットフォーム１０と、プラットフォーム１０上に構築された仮想マシン２０と、仮想マシン２０上で動作する１つ以上のソフトウェア２１とを備える。
【００２３】
プラットフォーム１０は、仮想マシン２０が動作するための基盤として機能し、中央演算処理装置（CPU）、揮発性メモリ装置、不揮発性メモリ装置、ＬＡＮポート、ＷＡＮポートといったハードウェア資源と、ハードウェア資源を直接に制御するファームウェア、ＯＳ（Operating System）といったソフトウェア資源によって構成されている。
【００２４】
スタティックリンクライブラリ１１は、静的リンクによって利用するよう想定・設計されたライブラリファイルからなる（以下、「ＳＬＬ１１」と呼ぶ。）。ＳＬＬ１１は、例えば、Ｃ言語の汎用的な関数ライブラリである。
【００２５】
仮想マシン２０は、プラットフォーム非依存性の仮想的な実行環境を構築し、その上でソフトウェアを実行する。具体的には、仮想マシン２０は、所定のオブジェクト指向言語で記述されたソフトウェアの中間コードをプラットフォーム１０の実行環境に応じたネイティブコードに変換する。
【００２６】
実施例の仮想マシン２０は、プラットフォーム１０をネイティブ（Native）領域としたＪａｖａ仮想マシン（JVM）になっている。
【００２７】
ソフトウェア２１は、Ｎａｔｉｖｅ領域のＳＬＬ１１等のライブラリを仮想マシン２０上から利用するアプリケーションソフトウェアになっている。ソフトウェア２１は、Ｊａｖａアプリケーションバンドルになっている（以下、「利用バンドル２１」と呼ぶ。）。
【００２８】
プラットフォーム１０は、他からの命令に応じてメモリ確保及びメモリ解放を実行するメモリ管理モジュール１２を有する。メモリ管理モジュール１２は、図３に示すように、各ＳＬＬとメモリ情報を対応付けて一覧にしたライブラリ一覧テーブル１３（以下、「ライブラリ一覧１３」と呼ぶ。）に基づいて、メモリのネイティブ領域を管理する。ライブラリ一覧１３は、揮発性メモリ装置に保持される。メモリ情報は、ＳＬＬ用に確保されたメモリのネイティブ領域を示す情報である。ライブラリ一覧１３は、利用バンドルからのＳＬＬの参照が外れた後に、当該ＳＬＬに対応したメモリ情報を解放する際にどのメモリ領域を解放するかを参照するためのものである。
【００２９】
ＳＬＬ用に確保されたメモリは、図２に示すように、仮想マシン固有領域２２と、ＯＳ固有領域２３とからなる。仮想マシン固有領域２２は、仮想マシン２０上で動作するアプリケーションソフトウェアの各種オブジェクトを格納する領域である。ＯＳ固有領域２３は、仮想マシン２０自身が使用する領域であり、ＯＳ上で直接実行可能なライブラリを実行する際に使用する領域となる。すなわち、ＳＬＬ用に確保されたメモリのネイティブ領域は、ＯＳ固有領域２３内に存在する。実施例の場合、仮想マシン２０がＪＶＭからなるので、Ｊａｖａオブジェクトの格納に使用するＪａｖａヒープが仮想マシン固有領域２２に含まれ、ＯＳネイティブのライブラリの実行に使用するＣヒープがＯＳ固有領域２３に含まれ、前記メモリ情報は、ポインタによって表される。メモリ管理モジュール１２は、メモリから返却されたメモリ情報（ポインタの値）を図３に示すライブラリ一覧１３に登録し、また、メモリ解放の対象となったメモリ情報をライブラリ一覧１３から削除する更新処理を行う。
【００３０】
また、図２に示すように、仮想マシン２０は、制御バンドル２４を有する。制御バンドル２４は、利用バンドル２１の起動や停止などのライフサイクルに関した制御を行う。
【００３１】
また、通信機器１は、仮想マシン２０で起動すべきソフトウェアが規定された一覧２５を備える。一覧２５は、図４に示すように、通信機器１自体又は仮想マシン２０自体が再起動した際、通信機器１の状況に合わせて起動するべきバンドルの一覧テーブルになっている（以下、「起動バンドル一覧２５」と呼ぶ。）。起動バンドル一覧２５は、バンドルの増減を知る以外に、バージョンの変更も検知するための情報を保持している。起動バンドル一覧２５は、不揮発性メモリ装置に保持される。通信機器１の状況変化に応じた仮想マシン２０の自動処理により、起動すべきバンドルを変更する起動バンドル一覧２５の更新が実施される。
【００３２】
制御バンドル２４は、起動させるバンドルを起動バンドル一覧２５に基づいて決定する。
【００３３】
また、図２に示すように、仮想マシン２０は、ガベージコレクタ２６を有する。ガベージコレクタ２６は、他から参照されていない仮想マシン固有領域２２のオブジェクトを自動的に、又は他から命令を受けて削除する。
【００３４】
制御バンドル２４は、利用バンドル２１に関連した依存関係の更新の際にガベージコレクタ２６を強制起動させる制御手段としてＣＰＵを機能させるためのプラグラムも含んでいる。
【００３５】
利用バンドル２１は、自己に関連した依存関係の更新の際、自己で参照中のＳＬＬ１１用に確保されたメモリのネイティブ領域を解放させるメモリ掃除機能２７を含んでいる。メモリ掃除機能２７の処理内容は、利用バンドル２１のソースコードに記述されている。
【００３６】
メモリ掃除機能２７は、利用バンドル２１に対して削除又は停止の命令が与えられたことを契機として、メモリ管理モジュール１２に対し、利用バンドル２１の名前（スタティックリンクライブラリ名）を通知すると共に対応のメモリ情報の削除命令を出すことにより、参照中のＳＬＬ１１用に確保されたメモリのネイティブ領域を解放させるメモリ操作手順をＣＰＵに実行させる。
【００３７】
また、メモリ掃除機能２７は、利用バンドル２１に読込命令が与えられたことを契機として、利用バンドルによって利用されるＳＬＬ１１の読込成功まで、ＳＬＬ１１用に確保されるべきメモリのネイティブ領域を解放させる処理を繰り返す。
【００３８】
制御バンドル２４に関する具体的な処理内容を図５に示す。先ず、制御バンドル２４は、仮想マシン２０の起動後、ＣＰＵに常駐する（開始）。制御バンドル２４は、利用バンドル２１に関連した依存関係の更新契機となる所定のイベントを取得する（Ｓ１）。所定のイベントとして、起動するべき利用バンドル種別の変更、又は利用バンドルの再起動の発生が設定されている。イベントを取得する方法は、サービスを利用する方法等が存在するが、特に限定されない。イベントの発生に伴い、起動バンドル一覧２５におけるバージョン情報、起動すべきバンドルの変更が、仮想マシン２０によって行われる。
【００３９】
制御バンドル２４は、（Ｓ１）でイベントを取得すると、変更後の起動バンドル一覧２５を取得し（Ｓ２）、依存関係の更新命令を仮想マシン２０に出すことにより、利用バンドル２１の削除、停止、ＳＬＬ１１の新たな結合相手とする利用バンドル２１のインストールや起動を仮想マシン２０に実行させる（Ｓ３）。仮想マシン２０がＪＶＭからなる場合、利用バンドルに関連した依存関係の更新は、「PackageAdmin.refleshPackage()」によって実行させることができる。この更新命令後、制御バンドル２４は、ガベージコレクタ２６を強制起動させるための命令を仮想マシン２０に出す（Ｓ４〜Ｓ６）。これにより、当該更新に伴うサービス停止によってリソースに余裕ができたタイミングでガベージコレクタ２６を起動させることができる。ひいては、可及的速やかに仮想マシン固有領域２２から不要なオブジェクトを削除し、当該領域でのメモリ不足によって利用バンドル２１の起動ができない事態を防ぐことができる。
【００４０】
ここで、制御バンドル２４は、（Ｓ４）〜（Ｓ６）により、ガベージコレクタ２６の強制起動を規定回数ｎだけ実施した後、変更後の起動バンドル一覧２５と、仮想マシン２０の処理対象になっている各ソフトウェアのライフサイクル状況とを取得する（Ｓ７、Ｓ８）。仮想マシン２０がＪＶＭからなる場合、ライフサイクル状況は、「Bundle.getState()」の実行により、仮想マシン２０上で動作中の全てのバンドルについて夫々のステータス状態が記述されたリストとして出力される。例えば、起動中のバンドルには、ステータス状態として「ACTIVE」が記述され、起動中でないバンドルには、その状態に応じて「INSTALLED」、「RESOLVED」、「STARTING」、「STOPPING」といった記述がなされる。
【００４１】
制御バンドル２４は、（Ｓ７、Ｓ８）で取得した起動バンドル一覧２５及びライフサイクル状況間の一致性を判断する（Ｓ９）。ここで、制御バンドル２４は、一覧２５で特定された起動すべき全てのバンドルと、ライフサイクル状況の中でステータス状態が起動中（例えば、仮想マシン２０がＪＶＭからなる場合は「ACTIVE」）の全てのバンドルとが完全に一致する場合、一致すると判断し、それ以外は、不一致と判断する。
【００４２】
制御バンドル２４は、（Ｓ９）において、判断結果が不一致の場合、（Ｓ４）〜（Ｓ９）の処理を繰り返し、一致の場合、処理を終了する。これにより、前述の仮想マシン固有領域２２のメモリ不足による起動失敗を確実に防止することができる。
【００４３】
メモリ掃除機能２７、メモリ管理モジュール１２に関する具体的な処理内容を図６、図７に示す。先ず、メモリ掃除機能２７は、利用バンドル２１の起動により、仮想マシン２０上で動作する状態となる（開始）。メモリ掃除機能２７は、仮想マシン２０からライフサイクル制御用の命令が与えられるまで待機している（Ｓ２１）。対象の命令は、仮想マシン２０がＪＶＭからなる場合、「uninstall」、「stop」、「install」、「start」になる。
【００４４】
メモリ掃除機能２７は、仮想マシン２０から利用バンドル２１に削除（uninstall）又は停止（stop）の命令が与えられた場合（Ｓ２２）、利用バンドル２１で参照中のＳＬＬ１１用に確保されたメモリのネイティブ領域を解放させるための命令をメモリ管理モジュール１２に出す（Ｓ２３）。これにより、利用バンドル２１が終了する。
【００４５】
メモリ管理モジュール１２は、利用バンドル２１から取得したライブラリ情報からＳＬＬ１１を特定し（Ｓ３１）、ライブラリ一覧テーブル１３からＳＬＬ１１のスタティックリンクライブラリ名に対応のメモリ情報を取得し（Ｓ３２）、当該メモリ情報に該当するメモリのネイティブ領域を解放する命令を揮発性メモリ装置に出し（Ｓ３３）、処理を終了する。
【００４６】
利用バンドル２１は、（Ｓ２２）において、仮想マシン２０から自己にロード（install）又は起動（start）の命令が与えられた場合、ＳＬＬ１１の読込（ロード）を実施する（Ｓ２４）。仮想マシン２０がＪＶＭからなる場合、「System.loadLibrary」の実行により、読込が実行される。メモリ掃除機能２７は、ＳＬＬ１１の読込に成功したか否かを監視する（Ｓ２５）。
【００４７】
メモリ掃除機能２７は、（Ｓ２５）において読込に成功した場合、これを取得した場合、処理を終了する。なお、メモリ管理モジュール１２がメモリ確保に成功した場合、メモリ管理モジュール１２からスタティックリンクライブラリ名を返されるので、この通知をもって読込成功と判断し、処理を終了するようにしてもよい。
【００４８】
メモリ掃除機能２７は、（Ｓ２５）において読込に失敗した場合、利用バンドル２１によって利用されるＳＬＬ１１の読込成功まで、ＳＬＬ１１用に確保されるべきメモリのネイティブ領域を解放させるための命令をメモリ管理モジュール１２に出す（Ｓ２４〜Ｓ２６）。これを受けてメモリ管理モジュール１２は、（Ｓ３１）〜（Ｓ３３）を実行する。なお、（Ｓ２５）において、メモリ掃除機能２７は、メモリ管理モジュール１２からエラー通知、タイムアウト等によって読込に失敗したと判断する。
【００４９】
このように、メモリ掃除機能２７は、（Ｓ２４）〜（Ｓ２６）の処理を（Ｓ２５）において読込に成功するまで繰り返す。これにより、更新前からＳＬＬ１１用に確保されているメモリのネイティブ領域解放が失敗していても、新たに起動される利用バンドル２１のメモリ掃除機能２７がＳＬＬ１１の読込に成功するまでＳＬＬ１１用に確保すべきメモリのネイティブ領域解放を行うため、当該利用バンドル２１を確実に起動することが可能となる。
【００５０】
以下、通信機器１の動作例を図１、図８に基づいて説明する。先ず、同図中に記載の制御バンドル２４の処理に関する「起動バンドルが変化」の想定例について説明する。通信機器１は、通信事業者Ａと通信事業者Ｂに対し、同じ初期設定で出荷される。仮想マシン２０は、ＪＶＭになっている。通信事業者Ａは、Ａ地域をアクセス網提供サービスの事業エリアとする。通信事業者Ｂは、Ａ地域と異なるＢ地域をアクセス網提供サービスの事業エリアとする。通信事業者Ａ及び通信事業者Ｂ間には、通信機器１を利用して提供するサービス内容に差異がある。図８に示すように、通信機器１には、ＡＢ判定バンドル３１、Ａエリアバンドル３２、Ｂエリアバンドル３３、利用バンドル２１、Ａ単独バンドル３４、Ｂ単独バンドル３５が搭載されている。Ａエリアバンドル３２は、Ａ単独バンドル３４及び利用バンドル２１を利用するものとされ、Ａ単独バンドル３４は、通信事業者Ａのみが提供するサービス機能を追加するためのものとなっている。Ｂエリアバンドル３３は、Ｂ単独バンドル３５及び利用バンドル２１を利用するものとされ、Ｂ単独バンドル３５は、通信事業者Ｂのみが提供するサービス機能を追加するものとなっている。利用バンドル２１は、通信事業者Ａ、Ｂ間で同じ基本的機能を実現するためのものとなっている。通信機器１が物理的にアクセス網に接続された後、通信機器１自体が初めて起動されたときに起動すべきハンドルは、ＡＢ判定バンドル３１及び利用バンドル２１に定められている。
【００５１】
その初回起動時、利用バンドル２１は、ＳＬＬ１１を以前に参照したものがないため、確実に起動する。すなわち、図１に示すように制御バンドル２４を経て、利用バンドル２１の起動の際、メモリ管理モジュール１２により、ＳＬＬ１１用にメモリのネイティブ領域が確保され、返却されたポインタがライブラリ一覧１３にメモリ情報として記述される。
【００５２】
また、初回起動時、ＡＢ判定バンドル３１は、通信機器１が通信事業者Ａ又はＢのいずれに接続されているかを判定し、その判定結果に応じて、Ａエリアバンドル３２又はＢエリアバンドル３３のいずれを使用するかを決定する。Ａエリアバンドル３２に決定した場合に起動すべきバンドルは、Ａエリアバンドル３２、Ａ単独バンドル３４及び利用バンドル２１と定められている。Ｂエリアバンドル３３に決定した場合に起動すべきバンドルは、Ｂエリアバンドル３３、Ｂ単独バンドル３５及び利用バンドル２１と定められている。いずれに決定された場合でも、初回起動時から起動すべきバンドルが変化することになり、ＡＢ判定バンドル３１は、起動バンドル一覧２５を更新する。この変化が同図中の「起動バンドルが変化」の想定例である。この想定例では、仮想マシン２０において、利用バンドル２１に関連した依存関係の更新が発生するため、利用バンドル２１を一旦停止させ、その更新後にＡエリアバンドル３２又はＢエリアバンドル３３と共に利用バンドル２１を再び起動させることが必要になる。
【００５３】
次に、図１中に記載の利用バンドル２１の処理に関する「更新」の想定例について説明する。この想定例は、利用バンドル２１を新しいバージョンに更新することである。この想定例では、新バージョンの利用バンドル２１がダウンロードされると、起動バンドル一覧２５に新規登録される。起動すべきバンドルは、旧バージョンの利用バンドル２１に代わって新バージョンの利用バンドル２１となるように定められている。新バージョンの利用バンドル２１を起動するには、利用バンドル２１に関連した依存関係の更新が発生するため、既に起動している旧バージョンの利用バンドル２１を停止させ、依存関係の更新後に新バージョンの利用バンドル２１を起動させることが必要になる。以下、図５〜図７のフローチャートに対応のステップ符号を適宜に示す。
【００５４】
図１に示すように、前述の「起動バンドルが変化」又は「更新」のいずれかの発生により、利用バンドル２１に関連した依存関係の更新が発生した際の動作は、次のようになる。なお、メモリのネイティブ領域のメモリ解放、ガベージコレクションに１回で成功した例で説明する。先ず、「起動バンドルが変化」又は「更新」が発生すると（Ｓ１）、起動すべきバンドルに変更が生じ、制御バンドル２４は、その変更後の起動バンドル一覧２５を取得する（Ｓ２）。
【００５５】
次に、制御バンドル２４は、利用バンドル２１に関連した依存関係の更新を仮想マシン２０に命令する（Ｓ３）。これを受けて仮想マシン２０は、利用バンドル２１に削除又は停止を命令する（Ｓ２１）。これを受けて利用バンドル２１のメモリ掃除機能は、ＳＬＬ１１用に確保されたメモリのネイティブ領域の解放をメモリ管理モジュール１２に命令する（Ｓ２２、Ｓ２３）。これを受けてメモリ管理モジュール１２は、ライブラリ一覧テーブル１３からＳＬＬ１１に対応のメモリ情報を取得し（Ｓ３１、Ｓ３２）、Ｃ言語の「Free()」の実行により、揮発性メモリ装置に当該メモリ情報に対応した領域のメモリ解放を命令する（Ｓ３３）。これにより、ＳＬＬ１１用に確保されたメモリのネイティブ領域が解放される。通常、メモリ解放に成功するので、新たに起動する利用バンドル２１のメモリ掃除機能２７によるメモリ解放処理には至らない（Ｓ２２、Ｓ２４〜Ｓ２６）。
【００５６】
また、制御バンドル２４は、依存関係の更新を命令したことを契機として（Ｓ３）、仮想マシン２０にガベージコレクタ２６の強制起動を命令する（Ｓ４）。これを受けてガベージコレクタ２６がガベージコレクションを実行する（Ｓ５〜Ｓ６）。これにより、依存関係の更新前から利用バンドル２１用に確保されている仮想マシン固有領域２２内の領域が解放される。解放成功を確認した制御バンドル２４は、ガベージコレクタ２６の強制起動を終了する（Ｓ７〜Ｓ９）。なお、強制起動の規定回数ｎは、５回程度に設定するとよい。
【００５７】
また、仮想マシン２０は、新バージョンの利用バンドル２１のロード、又は停止した利用バンドル２１の起動をするための処理を開始し、当該利用バンドル２１用に仮想マシン固有領域２２内の領域を確保する。
【００５８】
次に、仮想マシン２０は、新バージョンの利用バンドル２１にロード、又は停止した利用バンドル２１に起動を命令する。これを受けた当該利用バンドル２１は、ＳＬＬ１１の名前通知と読込命令をメモリ管理モジュール１２に出す。これを受けてメモリ管理モジュール１２は、Ｃ言語の「malloc()」の実行により、当該必要なネイティブ領域の確保を揮発性メモリ装置に命令する。これを受けて揮発性メモリ装置は、対応のＯＳ固有領域２３内に領域を確保し、ＳＬＬ１１の読込に成功し、メモリ管理モジュール１２にポインタを返却する。これを受けたメモリ管理モジュール１２は、ライブラリ一覧１３に、ポインタに基づいてＳＬＬ１１に対応のメモリ情報を登録し、また、当該利用バンドル２１にＳＬＬ１１の名前を通知する。以後、利用バンドル２１は、ＳＬＬ１１の参照成功を知り、起動を完了する。
【００５９】
通常、ここまでの処理に比べて、ガベージコレクタ２６が５回程度のガベージコレクション実施を完了するまでに時間を要する。したがって、制御バンドル２４は、規定回数の実施完了後、起動バンドル一覧２５と、ライフサイクル状況とを取得し、その一致性を判断することになり、次の規定回数の実施に至らない。
【００６０】
この発明の技術的範囲は、上述の実施形態や実施例に限定されず、特許請求の範囲の記載に基く技術的思想の範囲内での全ての変更を含むものである。
【符号の説明】
【００６１】
１  通信機器
１０  プラットフォーム
１１  スタティックリンクライブラリ（ＳＬＬ）
１２  メモリ管理モジュール
１３  ライブラリ一覧テーブル（ライブラリ一覧）
２０  仮想マシン
２１  ソフトウェア（利用バンドル）
２２  仮想マシン固有領域
２３  ＯＳ固有領域
２４  制御バンドル
２５  一覧（起動バンドル一覧）
２６  ガベージコレクタ
２７  メモリ掃除機能
【図１】
2015215657.tif 000003
【図２】
2015215657.tif 000004
【図３】
2015215657.tif 000005
【図４】
2015215657.tif 000006
【図５】
2015215657.tif 000007
【図６】
2015215657.tif 000008
【図７】
2015215657.tif 000009
【図８】
2015215657.tif 000010