(57)【要約】カスタムクラスライブラリを生成することに関連する装置、方法、及び記憶媒体が、本明細書において開示される。実施形態において、装置は、デバイスについてのワークロードと、ワークロードにより使用されるクラスライブラリと、を受信し、ワークロード及びクラスライブラリを解析し、１以上のワークロードフルＡＰＩ呼び出しチェーンを識別し、１以上のワークロードフルＡＰＩ呼び出しチェーンに関する情報を生成するよう構成されている解析部を含み得る。さらに、本装置は、クラスライブラリから、１以上のワークロードフルＡＰＩ呼び出しチェーンに少なくとも部分的に基づいて、クラスライブラリよりも小さな、ワークロードについてのカスタムクラスライブラリを生成する生成部を含み得る。他の実施形態も開示され特許請求され得る。
2017527060.tif 000002
【特許請求の範囲】
【請求項１】
デバイスのためのカスタムクラスライブラリを生成するための装置であって、
１以上のプロセッサと、
前記１以上のプロセッサにより制御される解析部であって、前記デバイスについてのワークロードと、前記ワークロードにより使用されるクラスライブラリと、を受信し、前記ワークロード及び前記クラスライブラリを解析し、前記ワークロードから前記クラスライブラリへの直接呼び出しと、前記ワークロードから前記クラスライブラリへの前記直接呼び出しからもたらされる、前記クラスライブラリ内の後続の呼び出しと、を含む１以上のワークロードフルアプリケーションプログラミングインタフェース（ＡＰＩ）呼び出しチェーンを識別し、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに関する情報を生成する解析部と、
を備えた、装置。
【請求項２】
前記解析部は、前記クラスライブラリを解析し、前記クラスライブラリの前記解析の結果に基づいて、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を生成する、請求項１記載の装置。
【請求項３】
前記解析部は、さらに、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩの一意な識別子と、戻り値及び１以上のパラメータを有する、該ＡＰＩのプロトタイプと、該ＡＰＩの親クラス識別子と、を記憶したＡＰＩ情報テーブルを生成する、請求項２記載の装置。
【請求項４】
前記解析部は、さらに、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより直接呼び出される１以上のメソッドを識別する１以上のメソッド識別子を記憶したメソッド呼び出しテーブルを生成する、請求項２記載の装置。
【請求項５】
前記解析部は、さらに、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより呼び出される１以上のフィールドを識別する１以上のフィールド識別子を記憶したフィールド呼び出しテーブルを生成する、請求項２記載の装置。
【請求項６】
前記解析部は、前記ワークロードを解析し、前記ワークロードの前記解析の結果に基づいて、前記ワークロード又は前記クラスライブラリのＡＰＩ呼び出しの１以上のレコードを生成する、請求項１乃至５いずれか一項記載の装置。
【請求項７】
前記解析部は、前記ワークロード又は前記クラスライブラリの前記ＡＰＩ呼び出しの１以上のレコードに少なくとも部分的に基づいて、前記１以上のワークロードフルＡＰＩ呼び出しチェーンを識別し、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を識別する、請求項６記載の装置。
【請求項８】
前記１以上のプロセッサにより制御される生成部であって、前記クラスライブラリから、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに少なくとも部分的に基づいて、前記クラスライブラリよりも小さな、前記ワークロードについてのカスタムクラスライブラリを生成する生成部
をさらに備えた、請求項１乃至７いずれか一項記載の装置。
【請求項９】
前記クラスライブラリは、Ｊａｖａ（登録商標）仮想マシン（ＪＶＭ）クラスライブラリを含む、請求項８記載の装置。
【請求項１０】
前記ワークロードは、インターネットオブシングス（ＩｏＴ）デバイスについてのワークロードを含む、請求項８記載の装置。
【請求項１１】
デバイスのためのカスタムクラスライブラリを生成するための方法であって、
コンピューティングデバイスにより、前記デバイスについてのワークロードと、前記ワークロードにより使用されるクラスライブラリと、を受信するステップと、
前記コンピューティングデバイスにより、前記ワークロード及び前記クラスライブラリを解析して、前記ワークロードから前記クラスライブラリへの直接呼び出しと、前記ワークロードから前記クラスライブラリへの前記直接呼び出しからもたらされる、前記クラスライブラリ内の後続の呼び出しと、を含む１以上のワークロードフルアプリケーションプログラミングインタフェース（ＡＰＩ）呼び出しチェーンを識別する解析ステップと、
前記コンピューティングデバイスにより、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに関する情報を生成するステップと、
を含む、方法。
【請求項１２】
前記解析ステップは、前記クラスライブラリを解析し、前記クラスライブラリの前記解析の結果に基づいて、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を生成するステップを含む、請求項１１記載の方法。
【請求項１３】
前記解析ステップは、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩの一意な識別子と、戻り値及び１以上のパラメータを有する、該ＡＰＩのプロトタイプと、該ＡＰＩの親クラス識別子と、を記憶したＡＰＩ情報テーブルを生成するステップを含む、請求項１２記載の方法。
【請求項１４】
前記解析ステップは、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより直接呼び出される１以上のメソッドを識別する１以上のメソッド識別子を記憶したメソッド呼び出しテーブルを生成するステップを含む、請求項１２記載の方法。
【請求項１５】
前記解析ステップは、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより呼び出される１以上のフィールドを識別する１以上のフィールド識別子を記憶したフィールド呼び出しテーブルを生成するステップを含む、請求項１２記載の方法。
【請求項１６】
前記解析ステップは、前記ワークロードを解析し、前記ワークロードの前記解析の結果に基づいて、前記ワークロード又は前記クラスライブラリのＡＰＩ呼び出しの１以上のレコードを生成するステップを含む、請求項１１乃至１５いずれか一項記載の方法。
【請求項１７】
前記解析ステップは、前記ワークロード又は前記クラスライブラリの前記ＡＰＩ呼び出しの１以上のレコードに少なくとも部分的に基づいて、前記１以上のワークロードフルＡＰＩ呼び出しチェーンを識別し、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を識別するステップを含む、請求項１６記載の方法。
【請求項１８】
前記コンピューティングデバイスにより、前記クラスライブラリから、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに少なくとも部分的に基づいて、前記クラスライブラリよりも小さな、前記ワークロードについてのカスタムクラスライブラリを生成するステップ
をさらに含む、請求項１１乃至１７いずれか一項記載の方法。
【請求項１９】
前記クラスライブラリは、Ｊａｖａ（登録商標）仮想マシン（ＪＶＭ）クラスライブラリを含む、請求項１８記載の方法。
【請求項２０】
前記ワークロードは、インターネットオブシングス（ＩｏＴ）デバイスについてのワークロードを含む、請求項１８記載の方法。
【請求項２１】
請求項１１乃至２０いずれか一項記載の方法を装置に実行させるプログラム。
【請求項２２】
デバイスのためのカスタムクラスライブラリを生成するための装置であって、
前記デバイスについてのワークロードと、前記ワークロードにより使用されるクラスライブラリと、を受信する手段と、
前記ワークロード及び前記クラスライブラリを解析して、前記ワークロードから前記クラスライブラリへの直接呼び出しと、前記ワークロードから前記クラスライブラリへの前記直接呼び出しからもたらされる、前記クラスライブラリ内の後続の呼び出しと、を含む１以上のワークロードフルアプリケーションプログラミングインタフェース（ＡＰＩ）呼び出しチェーンを識別する解析手段と、
前記１以上のワークロードフルＡＰＩ呼び出しチェーンに関する情報を生成する手段と、
を備えた、装置。
【請求項２３】
前記解析手段は、前記クラスライブラリを解析し、前記クラスライブラリの前記解析の結果に基づいて、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を生成する手段を含む、請求項２２記載の装置。
【請求項２４】
前記解析手段は、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩの一意な識別子と、戻り値及び１以上のパラメータを有する、該ＡＰＩのプロトタイプと、該ＡＰＩの親クラス識別子と、を記憶したＡＰＩ情報テーブルを生成する手段を含む、請求項２３記載の装置。
【請求項２５】
前記解析手段は、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより直接呼び出される１以上のメソッドを識別する１以上のメソッド識別子を記憶したメソッド呼び出しテーブルを生成する手段を含む、請求項２３記載の装置。
【請求項２６】
請求項２１記載のプログラムを記憶している記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コンピューティング分野に関し、詳細には、デバイスのためのカスタムクラスライブラリを生成することに関連する装置、方法、及び記憶媒体に関する。
【背景技術】
【０００２】
ここで提供される背景技術の記載は、本開示のコンテキストを概括的に提示するためにある。本明細書において別途示されない限り、このセクションに記載される情報は、本出願における請求項に対する従来技術ではないし、このセクションに含まれることにより従来技術であると自認するものでもない。
【０００３】
インターネットオブシングス（ＩｏＴ）が成長著しい。配備されている膨大なＩｏＴセンサ、コントローラ、及びスマートメータは、典型的には、アプリケーションが動作するためのメモリ及びフラッシュの空間の点で非常に限られたリソースを有するように設計されている。例えば、ほとんどのエッジデバイスは、１ＭＢ以下の総メモリしか有さない。
【０００４】
特に、クロスプラットフォームアプリケーションポータビリティ及び大きなＪａｖａ（登録商標、以下同様）開発者基盤のために、これらのデバイス上でＪａｖａアプリケーションを実行する強い要求が存在する。しかしながら、標準的なＪａｖａ仮想マシン（ＪＶＭ）クラスライブラリは、非常に小さなＩｏＴデバイスに適合させるには通常大き過ぎる。例えば、標準的なＪＶＭランタイムは、４０２４個のアプリケーションプログラミングインタフェース（ＡＰＩ）を含み約８０ＭＢのストレージを必要とする、Ｊａｖａ  ７のＯｐｅｎＪＤＫライブラリ等の、大きなライブラリを通常含む。
【０００５】
この問題に対処する典型的な解決策は、Ｏｒａｃｌｅ（登録商標）のＪａｖａＣａｒｄ及びＪ２ＭＥ等の、Ｊａｖａクラスライブラリの機能を低減させることにより、Ｊａｖａの小さなバージョンを作成することである。しかしながら、そのような手法は、機能を犠牲にし、デスクトップ及びサーバのＪａｖａアプリケーションとの互換性を壊してしまう。
【図面の簡単な説明】
【０００６】
実施形態が、添付の図面及び以下の詳細な説明により容易に理解されるであろう。本説明を円滑にするために、同様の参照符号は、同様の構造的要素を示す。実施形態が、限定ではなく例として、添付の図面に示される。
【図１】様々な実施形態に従った、デバイスのためのカスタムクラスライブラリを生成するための、本開示のコンポーネント図。
【図２】様々な実施形態に従った、デバイスのためのカスタムクラスライブラリを生成するためのプロセスの概要を示す図。
【図３】様々な実施形態に従った、ライブラリ内部ＡＰＩ呼び出しチェーンの生成を示す図。
【図４】様々な実施形態に従った、ワークロードフルＡＰＩ呼び出しチェーンの生成を示す図。
【図５】様々な実施形態に従った、カスタムクラスライブラリの生成をさらに詳細に示す図。
【図６】様々な実施形態に従った、本開示を実施するのに適した例示的なコンピュータシステムのコンポーネント図。
【図７】様々な実施形態に従った、コンピューティングデバイスが本開示を実施することを可能にするよう構成されている命令を有する例示的な記憶媒体を示す図。
【発明を実施するための形態】
【０００７】
カスタムクラスライブラリを生成することに関連する装置、方法、及び記憶媒体が、本明細書において開示される。実施形態において、装置は、ワークロード及びクラスライブラリを受信し、ワークロード及びクラスライブラリを解析し、１以上のワークロードフル（full）ＡＰＩ呼び出しチェーンを識別し、１以上のワークロードフルＡＰＩ呼び出しチェーンに関する情報を生成するよう構成されている解析部を含み得る。１以上のワークロードフルＡＰＩ呼び出しチェーンは、ワークロードからクラスライブラリへの直接呼び出しと、ワークロードからクラスライブラリへの直接呼び出しからもたらされる、クラスライブラリ内の後続の呼び出しと、を含み得る。さらに、本装置は、クラスライブラリから、１以上のワークロードフルＡＰＩ呼び出しチェーンに少なくとも部分的に基づいて、クラスライブラリよりも小さな、ワークロードについてのカスタムクラスライブラリを生成する生成部を含み得る。クラスライブラリの一例は、ＪＶＭクラスライブラリであり得る。ワークロードの一例は、ＩｏＴデバイスについてのワークロードであり得る。
【０００８】
以下の詳細な説明において、以下の詳細な説明の一部を形成する添付の図面が参照される。添付の図面において、同様の符号は、全体を通じて同様の部分を示し、実施され得る実施形態が例として示される。他の実施形態も利用可能であり、本開示の範囲から逸脱することなく、構造的変更又は論理的変更が可能であることを理解されたい。したがって、以下の詳細な説明は、限定的に解釈されるべきではなく、所定の実施形態の範囲は、請求項及びその均等の構成により定められる。
【０００９】
様々な方法の動作が、特許請求される主題を理解するのに最も有用な形で、複数の個別のアクション又は動作として順番に説明され得る。しかしながら、説明の順番は、これらの動作が必ず順番に依存することを意味するものとして解釈されるべきではない。詳細には、これらの動作は、提示される順番で実行されないこともある。説明される動作は、説明される実施形態とは異なる順番で実行されることもある。さらなる実施形態において、様々な追加の動作が、実行されることもあるし、且つ／あるいは、説明される動作が、省かれる、分けられる、又は組み合わされることもある。
【００１０】
本開示の目的のため、「Ａ及び／又はＢ」という語句は、（Ａ）、（Ｂ）、又は（Ａ及びＢ）を意味する。本開示の目的のため、「Ａ、Ｂ、及び／又はＣ」という語句は、（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ａ及びＣ）、（Ｂ及びＣ）、又は（Ａ、Ｂ、及びＣ）を意味する。
【００１１】
本説明において、「一実施形態において」又は「実施形態において」という語句が使用され得るが、これらはそれぞれ、同じ又は異なる実施形態のうちの１以上を指し得る。さらに、本開示の実施形態に関して使用される「備える」、「含む」、「有する」等の用語は、同義である。
【００１２】
特許請求の範囲を含め、以下で使用される場合、「モジュール」という用語は、１以上のソフトウェアプログラム又はファームウェアプログラムを実行する特定用途向け集積回路（ＡＳＩＣ）、電子回路、プロセッサ（共用、専用、又はグループ）、及び／若しくはメモリ（共用、専用、又はグループ）、組合せ論理回路、並びに／又は、説明される機能を提供する他の適切なコンポーネントを指し得るか、これらの一部であり得るか、又はこれらを含み得る。
【００１３】
次に図１を参照すると、様々な実施形態に従った、デバイスのためのカスタムクラスライブラリを生成するための、本開示のコンポーネント図が示されている。図示されるように、例えば、ＩｏＴデバイスのためのカスタムＪａｖａクラスライブラリといった、デバイスのためのカスタムクラスライブラリを生成するための構成１００は、解析部１０２及び生成部１０４を含み得る。実施形態において、解析部１０２は、デバイスについてのワークロード１１２と、ワークロード１１２により使用されるクラスライブラリ１１４と、を入力として受信し、ワークロード１１２及びクラスライブラリ１１４を解析して、１以上のライブラリ内部ＡＰＩ呼び出しチェーン１１６及び１以上のワークロードフルＡＰＩ呼び出しチェーン１１８を識別するよう構成され得る。さらに、解析部１０２は、１以上のライブラリ内部ＡＰＩ呼び出しチェーン１１６及び１以上のワークロードフルＡＰＩ呼び出しチェーン１１８に関する情報を生成するよう構成され得る。１以上のワークロードフルＡＰＩ呼び出しチェーン１１８は、ワークロード１１２からクラスライブラリ１１４への直接呼び出しと、ワークロード１１２からクラスライブラリ１１４への直接呼び出しからもたらされる、クラスライブラリ１１４内の後続の呼び出しと、を含み得る。さらに、生成部１０４は、クラスライブラリ１１４から、１以上のワークロードフルＡＰＩ呼び出しチェーン１１８に少なくとも部分的に基づいて、クラスライブラリ１１４よりも小さな、ワークロード１１２についてのカスタムクラスライブラリ１２０を生成するよう構成され得る。このより小さなサイズは、フルクラスライブラリのうちの呼び出されないクラス及びＡＰＩを除外することにより実現され得る。結果として、ワークロード１１２についてプラットフォームにわたる互換性を維持しながら、相対的にコンパクトなカスタムクラスライブラリ１２０が、制限されたリソースを有し、相対的に小さなワークロードのみを実行する多種多様な小さなＩｏＴデバイスのために、生成され得る。ＩｏＴデバイスの例は、ウェアラブルデバイス、産業インターネットデバイス、ホームオートメーションデバイス等を含み得るが、これらに限定されるものではない。
【００１４】
次に図２を参照すると、様々な実施形態に従った、デバイスのためのカスタムクラスライブラリを生成するためのプロセスの概要が示されている。図示されるように、デバイスのためのカスタムクラスライブラリ１２０を生成するためのプロセス２００は、ブロック２０２〜２０６において実行される動作を含み得る。ブロック２０２及び２０４の動作は、例えば、図１の前述した解析部１０２により実行され得る。ブロック２０６の動作は、例えば、図１の前述した生成部１０４により実行され得る。
【００１５】
プロセス２００は、ブロック２０２で開始し得る。ブロック２０２において、クラスライブラリがスキャン及び解析されて、ライブラリ内部ＡＰＩ呼び出しチェーンが識別され、これらのライブラリ内部ＡＰＩ呼び出しチェーンに関する情報が生成され得る。この動作は、図３を参照して後でさらに説明される。プロセス２００は、ブロック２０２からブロック２０４に進み得る。
【００１６】
ブロック２０４において、ワークロードがスキャン及び解析されて、ワークロードフルＡＰＩ呼び出しチェーンが識別され、これらのワークロードフルＡＰＩ呼び出しチェーンに関する情報が生成され得る。１以上のワークロードフルＡＰＩ呼び出しチェーンは、ワークロードからクラスライブラリへの直接呼び出しと、ワークロードからクラスライブラリへの直接呼び出しからもたらされる、クラスライブラリ内の後続の呼び出しと、を含み得ることを思い出してほしい。実施形態において、ワークロードは、幅優先探索（ＢＦＳ）に基づいて同様にスキャン及び解析され得る。この動作は、図４を参照して後でさらに説明される。プロセス２００は、ブロック２０４からブロック２０６に進み得る。
【００１７】
ブロック２０６において、クラスライブラリよりも小さなカスタムクラスライブラリが、クラスライブラリから、ワークロードフルＡＰＩ呼び出しチェーンに少なくとも部分的に基づいて生成され得る。この動作は、図５を参照して後でさらに説明される。プロセス２００は、ブロック２０６から終了し得る。
【００１８】
次に図３を参照すると、様々な実施形態に従った、ライブラリ内部ＡＰＩ呼び出しチェーンの生成が示されている。図示されるように、実施形態において、クラスライブラリ（例えば、クラスライブラリ１１４）におけるクラスファイル３０２はそれぞれ、スーパークラス名、インナー（内部）クラス名、メソッドプール、フィールドプール、インタフェース名等を有するクラスファイルレイアウト３０４を含み得る。クラスファイル３０２が、依存関係についてスキャン及び解析されて、クラスライブラリにおける各クラス及び／又はＡＰＩの間の呼び出し関係を表すトポロジカル接続グラフ（topological  connectivity  graph）が生成され得る。実施形態において、クラスファイル３０２は、幅優先探索（ＢＦＳ）に基づいてスキャン及び解析され得る。このスキャン及び解析から得られた全てのクラスライブラリ内部ＡＰＩ呼び出し及び被呼び出し関係情報が、依存関係データベース（ＤＢ）３０６に記憶され得る。実施形態において、これらの情報は、ＡＰＩ情報テーブル（API  Info  Table）３０８、メソッド呼び出しテーブル（Method  Invoking  Table）３１０、フィールド呼び出しテーブル（Field  Invoking  Table）３１２、及びクラステーブル（Class  Table）３１４という少なくとも４つのテーブルに記憶され得る。代替実施形態において、より多くの若しくはより少ないテーブル、又は他のデータ構造が、代わりに使用されてもよい。
【００１９】
ＡＰＩ情報テーブル３０８は、ＡＰＩ  ＩＤ、ＡＰＩのプロトタイプ（prototype）、及びＡＰＩの親クラスＩＤ（containing  class  ID）を記憶することができる。実施形態において、ＡＰＩ  ＩＤは、スキャン解析の一部として各ＡＰＩ（Ｊａｖａの場合、各Ｊａｖａフィールド及び各Ｊａｖａメソッドを含む）に割り当てられる一意な識別子であり得る。ＡＰＩプロトタイプ（戻り値及びパラメータ）は、クラスファイル３０２から得られ得る。親クラスＩＤは、（クラステーブル３１４が構築された後に）クラステーブル３１４から、クラス名を検索することにより得られ得る。
【００２０】
メソッド呼び出しテーブル３１０は、所与のＡＰＩにより直接呼び出される１以上のメソッドの情報を記憶することができる。Ｊａｖａの場合、呼び出される１以上のメソッドの１つの部分が、invoke_virtual及びinvoke_staticのバイトコードから得られ得る。このバイトコードのオペランドは、呼び出されるＡＰＩ名及び親クラスを示す。呼び出される１以上のメソッドの他の部分は、invoke_special及びinvoke_interfaceのバイトコードから得られ得る。このバイトコードのオペランドは、呼び出されるＡＰＩを示し、正確なスーパークラス又はインタフェースが、（クラステーブル３０４が構築された後に）クラステーブル３０４を検索することにより判別され得る。
【００２１】
フィールド呼び出しテーブル３１２は、所与のＡＰＩにより直接呼び出される１以上のフィールドの情報を記憶することができる。Ｊａｖａの場合、呼び出される１以上のフィールド名が、putfield、getfield、putstatic、及びgetstaticのバイトコードから得られ得る。このバイトコードのオペランドは、呼び出されるフィールド名であり、それらのフィールド名が、ＡＰＩ情報テーブル３０８を検索することにより、ＡＰＩ  ＩＤに変換され得る。
【００２２】
クラステーブル３１４は、各クラス／インタフェース、及び、スキャン中に得られたそれらの継承関係、の情報を記憶することができる。
【００２３】
次に図４を参照すると、様々な実施形態に従った、ワークロードフルＡＰＩ呼び出しチェーンの生成が示されている。図示されるように、実施形態において、ワークロード（例えば、ワークロード１１２）におけるクラスファイル４０２は、前述したクラスファイルレイアウト３０４に類似する情報を有するクラスファイルレイアウト４０４を含み得る。クラスファイル４０２がスキャン及び解析されて、ワークロードからクラスライブラリへの全ての直接呼び出しが識別され得る。ワークロードからクラスライブラリへの直接呼び出しからもたらされる、クラスライブラリ内の後続の呼び出しが、クラスライブラリ内部呼び出しチェーン情報を有する依存関係ＤＢ４０６（前述した依存関係ＤＢ３０６に類似する）から得られ得る。クラスファイル３０２のスキャン及び解析と同様に、クラスファイル４０２とともに、クラスライブラリ内の後続の呼び出しが、幅優先探索（ＢＦＳ）に基づいて同様にスキャン及び解析され得る。結果として、ライブラリ内の結果としてもたらされる後続の呼び出しを含むワークロードフルＡＰＩ呼び出しチェーンを有する最終被呼び出しＡＰＩリスト４０８が生成され得る。
【００２４】
次に図５を参照すると、様々な実施形態に従った、カスタムクラスライブラリの生成が、さらに詳細に示されている。図示されるように、カスタムクラスライブラリを生成するための動作５００は、ブロック５０２〜５０８において実行される動作を含み得る。これらの動作は、例えば、図１の前述した生成部１０４により実行され得る。
【００２５】
ブロック５０２において、ＡＰＩが、例えば、依存関係ＤＢ３０６内の前述したＡＰＩ情報テーブル３０８から、取得され得る。
【００２６】
ブロック５０４において、例えば、依存関係ＤＢ３０６内の前述したＡＰＩ情報テーブル３０８から、ＡＰＩの親クラスについての判別がなされ得る。
【００２７】
ブロック５０６において、取得されたＡＰＩ及びこのＡＰＩの親クラスが、カスタムクラスライブラリにコピーされ得る。
【００２８】
ブロック５０８において、全ての適用可能なＡＰＩ、すなわち、ワークロードフルＡＰＩ呼び出しチェーンにより示される関連する全てのＡＰＩが調べられたかどうかについての判定がなされ得る。この判定は、例えば、全てのＡＰＩが、依存関係ＤＢ３０６内のＡＰＩ情報テーブル３０８から取得されて調べられたかどうかに基づいて、なされ得る。全ての適用可能なＡＰＩが調べられた場合、この生成動作は終了し得る。一方、全ての適用可能なＡＰＩが調べられていない場合、動作５００は、前述したブロック５０２に戻り続き得る。
【００２９】
次いで、ブロック５０２〜５０８における動作が繰り返され得る。次いで、ブロック５０２〜５０８における動作が、全ての適用可能なＡＰＩ（例えば、依存関係ＤＢ３０６内のＡＰＩ情報テーブル３０８内の全てのＡＰＩ）が調べられる／処理されるまで、必要とされる回数だけ繰り返され得る。
【００３０】
次に図６を参照すると、様々な実施形態に従った、図１の構成について使用するのに適した例示的なコンピュータが示されている。図示されるように、コンピュータ６００は、１以上のプロセッサ又はプロセッサコア６０２、及びシステムメモリ６０４を含み得る。実施形態において、複数のプロセッサコア６０２が、１つのダイ上に設けられ得る。特許請求の範囲を含め、本出願の目的のため、「プロセッサ」及び「プロセッサコア」という用語は、文脈が別途明確に要求しない限り、同義と考えられ得る。さらに、コンピュータ６００は、１以上の大容量記憶デバイス６０６（例えば、ディスケット、ハードドライブ、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）等）、１以上の入力／出力（Ｉ／Ｏ）デバイス６０８（例えば、ディスプレイ、キーボード、カーソルコントロール等）、及び通信インタフェース６１０（例えば、ネットワークインタフェースカード、モデム等）を含み得る。実施形態において、ディスプレイユニットは、タッチ検知スクリーンであり得、ディスプレイスクリーン、１以上のプロセッサ、記憶媒体、及び通信要素を含み、さらに、キーボードを有するベースプラットフォームから取り外し可能にドッキング又はアンドッキングされ得る。これらの要素は、１以上のバスを表し得るシステムバス６１２を介して互いに接続され得る。複数のバスの場合、これら複数のバスは、１以上のバスブリッジ（図示せず）によりブリッジされ得る。
【００３１】
これらの要素の各々は、当分野において既知であるその従来の機能を実行することができる。詳細には、システムメモリ６０４及び１以上の大容量記憶デバイス６０６は、例えば、演算ロジック６２２として表記されている、解析部１０２及び／又は生成部１０４に関連する動作を含むがこれらに限定されるものではない前述した動作を実装するプログラミング命令のワーキングコピー及び永続的コピーを記憶するために使用され得る。様々な要素は、１以上のプロセッサ６０２によりサポートされるアセンブラ命令、又は、例えば、そのような命令にコンパイルされ得る、例えばＣ等の高水準言語、により実装され得る。
【００３２】
プログラミング命令の永続的コピーは、工場において、若しくは、例えば、コンパクトディスク（ＣＤ）等の配布媒体（図示せず）を介して、又は、（配布サーバ（図示せず）から）通信インタフェース６１０を介して、１以上の永続的大容量記憶デバイス６０６に配置され得る。すなわち、エージェントプログラムの実装物を有する１以上の配布媒体が、エージェントを配布し様々なコンピューティングデバイスをプログラムするために使用され得る。
【００３３】
これらの要素６１０〜６１２の数、能力、及び／又は機能は、例示的なコンピュータ６００の意図される使用に応じて、例えば、例示的なコンピュータ６００がスマートフォンであるかタブレットであるかウルトラブック（登録商標）であるかラップトップであるか又はサーバであるかに応じて、変わり得る。これらの要素６１０〜６１２の構成は、既知であり、したがって、さらには説明されない。
【００３４】
図７は、様々な実施形態に従った、前述した解析部１０２及び／又は生成部１０４に関連する動作のうちの全て又は選択された動作を実施するよう構成されている命令を有する例示的な非一時的なコンピュータ読み取り可能な記憶媒体を示している。図示されるように、非一時的なコンピュータ読み取り可能な記憶媒体７０２は、複数のプログラミング命令７０４を含み得る。プログラミング命令７０４は、プログラミング命令の実行に応じて、例えばコンピュータ６００といったデバイスが、例えば、図１の解析部１０２及び／又は生成部１０４に関連する様々な動作若しくは図２〜図５の様々な動作をそれぞれ実行することを可能にするよう構成され得る。代替実施形態において、プログラミング命令７０４は、代わりに、複数の非一時的なコンピュータ読み取り可能な記憶媒体７０２に設けられてもよい。さらに他の実施形態において、プログラミング命令７０４は、一時的なコンピュータ読み取り可能な信号内に符号化されてもよい。
【００３５】
図６に戻って参照すると、一実施形態に関して、プロセッサ６０２のうちの少なくとも１つは、図１の解析部１０２及び／又は生成部１０４に関連する動作のうちの全て又は選択された動作若しくは図２〜図５の動作の態様を実施するよう構成されている、（システムメモリ６０４及び／又は大容量記憶デバイス６０６に記憶する代わりに）演算ロジック６２２を有するコンピュータ読み取り可能な記憶媒体と一緒にパッケージ化され得る。一実施形態に関して、プロセッサ６０２のうちの少なくとも１つは、システムインパッケージ（ＳｉＰ）を形成するために、演算ロジック６２２を有するコンピュータ読み取り可能な記憶媒体と一緒にパッケージ化され得る。一実施形態に関して、プロセッサ６０２のうちの少なくとも１つは、演算ロジック６２２を有するコンピュータ読み取り可能な記憶媒体とともに同じダイ上に集積され得る。一実施形態に関して、プロセッサ６０２のうちの少なくとも１つは、システムオンチップ（ＳｏＣ）を形成するために、演算ロジック６２２を有するコンピュータ読み取り可能な記憶媒体と一緒にパッケージ化され得る。少なくとも１つの実施形態に関して、ＳｏＣは、例えば、ハイブリッドコンピューティングタブレット／ラップトップにおいて利用され得るが、これに限定されるものではない。
【００３６】
以上、デバイスのためのカスタムクラスライブラリを生成するための実施形態が説明された。例示的な実施形態は、以下を含み得る。
【００３７】
例１は、デバイスのためのカスタムクラスライブラリを生成するための装置とすることができる。本装置は、１以上のプロセッサ及び解析部を含み得る。前記解析部は、前記１以上のプロセッサにより制御され、前記デバイスについてのワークロードと、前記ワークロードにより使用されるクラスライブラリと、を受信し、前記ワークロード及び前記クラスライブラリを解析し、前記ワークロードから前記クラスライブラリへの直接呼び出しと、前記ワークロードから前記クラスライブラリへの前記直接呼び出しからもたらされる、前記クラスライブラリ内の後続の呼び出しと、を含む１以上のワークロードフルアプリケーションプログラミングインタフェース（ＡＰＩ）呼び出しチェーンを識別し、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに関する情報を生成し得る。
【００３８】
例２は、前記解析部が、前記クラスライブラリを解析し、前記クラスライブラリの前記解析の結果に基づいて、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を生成し得る、例１とすることができる。
【００３９】
例３は、前記解析部が、さらに、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩの一意な識別子と、戻り値及び１以上のパラメータを有する、該ＡＰＩのプロトタイプと、該ＡＰＩの親クラス識別子と、を記憶したＡＰＩ情報テーブルを生成し得る、例２とすることができる。
【００４０】
例４は、前記解析部が、さらに、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより直接呼び出される１以上のメソッドを識別する１以上のメソッド識別子を記憶したメソッド呼び出しテーブルを生成し得る、例２とすることができる。
【００４１】
例５は、前記解析部が、さらに、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより呼び出される１以上のフィールドを識別する１以上のフィールド識別子を記憶したフィールド呼び出しテーブルを生成し得る、例２とすることができる。
【００４２】
例６は、前記解析部が、前記ワークロードを解析し、前記ワークロードの前記解析の結果に基づいて、前記ワークロード又は前記クラスライブラリのＡＰＩ呼び出しの１以上のレコードを生成し得る、例１乃至５のうちのいずれかとすることができる。
【００４３】
例７は、前記解析部が、前記ワークロード又は前記クラスライブラリの前記ＡＰＩ呼び出しの１以上のレコードに少なくとも部分的に基づいて、前記１以上のワークロードフルＡＰＩ呼び出しチェーンを識別し、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を識別し得る、例６とすることができる。
【００４４】
例８は、前記１以上のプロセッサにより制御される生成部であって、前記クラスライブラリから、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに少なくとも部分的に基づいて、前記クラスライブラリよりも小さな、前記ワークロードについてのカスタムクラスライブラリを生成する生成部をさらに備えた、例１乃至７のうちのいずれかとすることができる。
【００４５】
例９は、前記クラスライブラリが、Ｊａｖａ仮想マシン（ＪＶＭ）クラスライブラリを含み得る、例８とすることができる。
【００４６】
例１０は、前記ワークロードが、インターネットオブシングス（ＩｏＴ）デバイスについてのワークロードを含み得る、例８とすることができる。
【００４７】
例１１は、デバイスのためのカスタムクラスライブラリを生成するための方法とすることができる。本方法は、コンピューティングデバイスにより、前記デバイスについてのワークロードと、前記ワークロードにより使用されるクラスライブラリと、を受信するステップと、前記コンピューティングデバイスにより、前記ワークロード及び前記クラスライブラリを解析して、前記ワークロードから前記クラスライブラリへの直接呼び出しと、前記ワークロードから前記クラスライブラリへの前記直接呼び出しからもたらされる、前記クラスライブラリ内の後続の呼び出しと、を含む１以上のワークロードフルアプリケーションプログラミングインタフェース（ＡＰＩ）呼び出しチェーンを識別する解析ステップと、前記コンピューティングデバイスにより、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに関する情報を生成するステップと、を含み得る。
【００４８】
例１２は、前記解析ステップが、前記クラスライブラリを解析し、前記クラスライブラリの前記解析の結果に基づいて、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を生成するステップを含み得る、例１１とすることができる。
【００４９】
例１３は、前記解析ステップが、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩの一意な識別子と、戻り値及び１以上のパラメータを有する、該ＡＰＩのプロトタイプと、該ＡＰＩの親クラス識別子と、を記憶したＡＰＩ情報テーブルを生成するステップをさらに含み得る、例１２とすることができる。
【００５０】
例１４は、前記解析ステップが、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより直接呼び出される１以上のメソッドを識別する１以上のメソッド識別子を記憶したメソッド呼び出しテーブルを生成するステップをさらに含み得る、例１２とすることができる。
【００５１】
例１５は、前記解析ステップが、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより呼び出される１以上のフィールドを識別する１以上のフィールド識別子を記憶したフィールド呼び出しテーブルを生成するステップをさらに含み得る、例１２とすることができる。
【００５２】
例１６は、前記解析ステップが、前記ワークロードを解析し、前記ワークロードの前記解析の結果に基づいて、前記ワークロード又は前記クラスライブラリのＡＰＩ呼び出しの１以上のレコードを生成するステップを含み得る、例１１乃至１５のうちのいずれかとすることができる。
【００５３】
例１７は、前記解析ステップが、前記ワークロード又は前記クラスライブラリの前記ＡＰＩ呼び出しの１以上のレコードに少なくとも部分的に基づいて、前記１以上のワークロードフルＡＰＩ呼び出しチェーンを識別し、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を識別するステップを含み得る、例１６とすることができる。
【００５４】
例１８は、前記コンピューティングデバイスにより、前記クラスライブラリから、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに少なくとも部分的に基づいて、前記クラスライブラリよりも小さな、前記ワークロードについてのカスタムクラスライブラリを生成するステップをさらに含み得る、例１１乃至１７のうちのいずれかとすることができる。
【００５５】
例１９は、前記クラスライブラリが、Ｊａｖａ仮想マシン（ＪＶＭ）クラスライブラリを含み得る、例１８とすることができる。
【００５６】
例２０は、前記ワークロードが、インターネットオブシングス（ＩｏＴ）デバイスについてのワークロードを含み得る、例１８とすることができる。
【００５７】
例２１は、デバイスのためのカスタムクラスライブラリを生成するための装置とすることができる。本装置は、前記デバイスについてのワークロードと、前記ワークロードにより使用されるクラスライブラリと、を受信する手段と、前記ワークロード及び前記クラスライブラリを解析して、前記ワークロードから前記クラスライブラリへの直接呼び出しと、前記ワークロードから前記クラスライブラリへの前記直接呼び出しからもたらされる、前記クラスライブラリ内の後続の呼び出しと、を含む１以上のワークロードフルアプリケーションプログラミングインタフェース（ＡＰＩ）呼び出しチェーンを識別する解析手段と、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに関する情報を生成する手段と、を備え得る。
【００５８】
例２２は、前記解析手段が、前記クラスライブラリを解析し、前記クラスライブラリの前記解析の結果に基づいて、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を生成する手段を含み得る、例２１とすることができる。
【００５９】
例２３は、前記解析手段が、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩの一意な識別子と、戻り値及び１以上のパラメータを有する、該ＡＰＩのプロトタイプと、該ＡＰＩの親クラス識別子と、を記憶したＡＰＩ情報テーブルを生成する手段をさらに含み得る、例２１とすることができる。
【００６０】
例２４は、前記解析手段が、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより直接呼び出される１以上のメソッドを識別する１以上のメソッド識別子を記憶したメソッド呼び出しテーブルを生成する手段をさらに含み得る、例２２とすることができる。
【００６１】
例２５は、前記解析手段が、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより呼び出される１以上のフィールドを識別する１以上のフィールド識別子を記憶したフィールド呼び出しテーブルを生成する手段をさらに含み得る、例２２とすることができる。
【００６２】
例２６は、前記解析手段が、前記ワークロードを解析し、前記ワークロードの前記解析の結果に基づいて、前記ワークロード又は前記クラスライブラリのＡＰＩ呼び出しの１以上のレコードを生成する手段を含み得る、例２１乃至２５のうちのいずれかとすることができる。
【００６３】
例２７は、前記解析手段が、前記ワークロード又は前記クラスライブラリの前記ＡＰＩ呼び出しの１以上のレコードに少なくとも部分的に基づいて、前記１以上のワークロードフルＡＰＩ呼び出しチェーンを識別し、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を識別する手段を含み得る、例２６とすることができる。
【００６４】
例２８は、前記クラスライブラリから、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに少なくとも部分的に基づいて、前記クラスライブラリよりも小さな、前記ワークロードについてのカスタムクラスライブラリを生成する生成部をさらに備えた、例２１乃至２７のうちのいずれかとすることができる。
【００６５】
例２９は、前記クラスライブラリが、Ｊａｖａ仮想マシン（ＪＶＭ）クラスライブラリを含み得る、例２８とすることができる。
【００６６】
例３０は、前記ワークロードが、インターネットオブシングス（ＩｏＴ）デバイスについてのワークロードを含み得る、例２８とすることができる。
【００６７】
例３１は、命令を有する１以上の非一時的なコンピュータ読み取り可能な記憶媒体であって、装置による前記命令の実行に応じて、前記命令は、前記装置に、前記デバイスについてのワークロードと、前記ワークロードにより使用されるクラスライブラリと、を受信することと、前記ワークロード及び前記クラスライブラリを解析することと、前記ワークロードから前記クラスライブラリへの直接呼び出しと、前記ワークロードから前記クラスライブラリへの前記直接呼び出しからもたらされる、前記クラスライブラリ内の後続の呼び出しと、を含む１以上のワークロードフルアプリケーションプログラミングインタフェース（ＡＰＩ）呼び出しチェーンを識別することと、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに関する情報を生成することと、を実行させる、１以上の非一時的なコンピュータ読み取り可能な記憶媒体とすることができる。
【００６８】
例３２は、前記解析することが、前記クラスライブラリを解析し、前記クラスライブラリの前記解析の結果に基づいて、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を生成することを含み得る、例３１とすることができる。
【００６９】
例３３は、前記解析することが、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩの一意な識別子と、戻り値及び１以上のパラメータを有する、該ＡＰＩのプロトタイプと、該ＡＰＩの親クラス識別子と、を記憶したＡＰＩ情報テーブルを生成することをさらに含み得る、例３２とすることができる。
【００７０】
例３４は、前記解析することが、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより直接呼び出される１以上のメソッドを識別する１以上のメソッド識別子を記憶したメソッド呼び出しテーブルを生成することをさらに含み得る、例３２とすることができる。
【００７１】
例３５は、前記解析することが、前記クラスライブラリの前記解析の結果に基づいて、各ＡＰＩについて、該ＡＰＩにより呼び出される１以上のフィールドを識別する１以上のフィールド識別子を記憶したフィールド呼び出しテーブルを生成することをさらに含み得る、例３４とすることができる。
【００７２】
例３６は、前記解析することが、前記ワークロードを解析し、前記ワークロードの前記解析の結果に基づいて、前記ワークロード又は前記クラスライブラリのＡＰＩ呼び出しの１以上のレコードを生成することを含み得る、例３１乃至３５のうちのいずれかとすることができる。
【００７３】
例３７は、前記解析することが、前記ワークロード又は前記クラスライブラリの前記ＡＰＩ呼び出しの１以上のレコードに少なくとも部分的に基づいて、前記１以上のワークロードフルＡＰＩ呼び出しチェーンを識別し、前記クラスライブラリにおける各クラス又はＡＰＩの間の呼び出し関係を表す接続情報を識別することを含み得る、例３６とすることができる。
【００７４】
例３８は、前記命令が、前記装置に、さらに、前記クラスライブラリから、前記１以上のワークロードフルＡＰＩ呼び出しチェーンに少なくとも部分的に基づいて、前記クラスライブラリよりも小さな、前記ワークロードについてのカスタムクラスライブラリを生成することを実行させ得る、例３１乃至３７のうちのいずれかとすることができる。
【００７５】
例３９は、前記クラスライブラリが、Ｊａｖａ仮想マシン（ＪＶＭ）クラスライブラリを含み得る、例３８とすることができる。
【００７６】
例４０は、前記ワークロードが、インターネットオブシングス（ＩｏＴ）デバイスについてのワークロードを含み得る、例３８とすることができる。
【００７７】
所定の実施形態が、説明の目的のために、図示され本明細書において説明されたが、多種多様な代替実施形態及び／又は均等実施形態、若しくは同じ目的を達成するために算出される実装が、本開示の範囲から逸脱することなく、図示され説明された実施形態の代わりに代替され得る。本出願は、本明細書において説明された実施形態のあらゆる適応形態又は変形形態を網羅するよう意図されている。したがって、本明細書において説明された所定の実施形態は、請求項によってのみ定められることが明確に意図されている。
【００７８】
本開示において、「ある」若しくは「第１の」要素又はその同等のことが記載されている場合、そのような開示は、１以上のそのような要素を含み、２以上のそのような要素を必要とするものでも排除するものでもない。さらに、特定された要素についての序数のインジケータ（例えば、第１の、第２の、又は第３の）は、要素を区別するために使用され、そのような要素の必要とされる又は限られる数を示すものでも意味するものでもなく、別途明示されない限り、そのような要素の特定の位置又は順番を示すものでもない。
【図１】
2017527060.tif 000003
【図２】
2017527060.tif 000004
【図３】
2017527060.tif 000005
【図４】
2017527060.tif 000006
【図５】
2017527060.tif 000007
【図６】
2017527060.tif 000008
【図７】
2017527060.tif 000009
【国際調査報告】
2017527060.tif 000010
2017527060.tif 000011