図面 (/)

技術 情報処理装置、情報処理方法およびコンピュータプログラム

出願人 キヤノン株式会社
発明者 岡村秀一
出願日 2018年1月31日 (2年2ヶ月経過) 出願番号 2018-015115
公開日 2019年8月8日 (8ヶ月経過) 公開番号 2019-133414
状態 未査定
技術分野 特別なプログラム実行装置
主要キーワード 平均時刻 コンパイルコード 不足判定 コンパイル済みコード コードキャッシュ 部分プログラム マシン語 コンパイル済み
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2019年8月8日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (16)

課題

コンパイル済みコードによるキャッシュ圧迫をより効率的に防止することを目的とする。

解決手段

仮想マシンが実行するメソッドコンパイルしてネイティブコードに変換する動的コンパイル手段と、前記ネイティブコードをデコンパイルするデコンパイル手段と、前記デコンパイル手段により行われたデコンパイルに関する情報を記録する記録手段と、前記デコンパイルに関する情報に基づき、前記デコンパイル手段によるデコンパイルを禁止する禁止手段と、を有することを特徴とする

概要

背景

Java(登録商標仮想マシンのように、仮想マシンによって実行されるメソッドの処理を中間コードからネイティブコードに変換することで、メソッドの処理時間を高速化する動的コンパイラ技術がある。中間コードとは、Javaにおけるバイトコードのことであり、仮想マシンを実行するマイクロプロセッサやOSに依存せず、仮想マシンが逐一解釈、実行可能な言語のことである。一方、ネイティブコードとは、マシン語など、プログラムを実行するマイクロプロセッサが直接解釈及び実行可能な言語のことである。通常、中間コードよりもネイティブコードのほうが高速に処理される。

このような動的コンパイラ技術では、コンパイルして変換したネイティブコード(コンパイル済みコード)を保存するためのコードキャッシュ領域が限られる。この限られたコードキャッシュ領域を効率的に使うため、コードキャッシュ領域の空きがどれくらいかを調べ、足りなくなるとあまり使われていないコンパイル済みコードに対してデコンパイル処理を行う。そしてコードキャッシュ領域からコンパイル済みコードが削除される。

特許文献1に開示の「コードを投機的に最適化するための方法」では、コンパイル済みコードを辞書に入れておき、辞書の内容に変化が検出された場合に、必要のなくなったコンパイル済みコードを無効化する。

特許文献2に開示の「仮想機械用プログラムのコンパイル対象指定方法」では、コンパイル対象から除外したいメソッドを、プログラムの階層構造を使って指定することを可能としている。これにより、コンパイルしたくないプログラム部分を容易に除外することができる。

特許文献3には、キー操作、描画等の特定の機能を有する部分プログラムコンパイル済みキャッシュ領域に格納されている場合に、削除対象にしないことが開示されている。

概要

コンパイル済みコードによるキャッシュ圧迫をより効率的に防止することを目的とする。仮想マシンが実行するメソッドをコンパイルしてネイティブコードに変換する動的コンパイル手段と、前記ネイティブコードをデコンパイルするデコンパイル手段と、前記デコンパイル手段により行われたデコンパイルに関する情報を記録する記録手段と、前記デコンパイルに関する情報に基づき、前記デコンパイル手段によるデコンパイルを禁止する禁止手段と、を有することを特徴とする

目的

本発明は、上記課題を鑑みてなされたものであり、コンパイル済みコードによるキャッシュ圧迫をより効率的に防止することを目的とする

効果

実績

技術文献被引用数
0件
牽制数
0件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

仮想マシンが実行するメソッドコンパイルしてネイティブコードに変換する動的コンパイル手段と、前記ネイティブコードをデコンパイルするデコンパイル手段と、前記デコンパイル手段により行われたデコンパイルに関する情報を記録する記録手段と、前記デコンパイルに関する情報に基づき、前記デコンパイル手段によるデコンパイルを禁止する禁止手段と、を有することを特徴とする情報処理装置

請求項2

前記デコンパイルに関する情報は、前記デコンパイル手段により行われたデコンパイルの回数であり、前記禁止手段は、対象のメソッドの前記デコンパイルの回数が所定の閾値を超えている場合は、前記対象のメソッドに対する前記デコンパイル手段によるデコンパイルを禁止することを特徴とする請求項1に記載の情報処理装置。

請求項3

前記禁止手段により前記対象のメソッドに対する前記デコンパイル手段によるデコンパイルを禁止された後、前記対象のメソッドがデコンパイルの対象に選ばれた回数が所定の閾値を超えた場合、前記対象のメソッドに対する前記デコンパイル手段によるデコンパイルの禁止を解除する解除手段をさらに有することを特徴とする請求項2に記載の情報処理装置。

請求項4

前記対象のメソッドを使用しているアプリケーションが停止または削除された場合、前記対象のメソッドに対する前記デコンパイル手段によるデコンパイルの禁止を解除する解除手段をさらに有することを特徴とする請求項2に記載の情報処理装置。

請求項5

前記解除手段により前記対象のメソッドのデコンパイルが解除された場合、前記対象のメソッドの前記ネイティブコードを外部装置送り、前記対象のメソッドをコンパイルする場合は、前記外部装置から前記ネイティブコードを取得する取得手段をさらに有することを特徴とする請求項4に記載の情報処理装置。

請求項6

前記デコンパイルに関する情報は、前記デコンパイル手段にデコンパイルが行われてから、前記コンパイル手段によりコンパイルが行われるまでの時間であり、前記禁止手段は、対象のメソッドの前記時間の平均時間が所定の閾値よりも小さい場合、前記対象のメソッドに対する前記デコンパイル手段によるデコンパイルを禁止することを特徴とする請求項1に記載の情報処理装置。

請求項7

前記デコンパイルに関する情報は、前記コンパイル手段によりコンパイルが行われてから前記デコンパイル手段にデコンパイルが行われ、更に、前記コンパイル手段によりコンパイルが行われるまでの時間であり、前記禁止手段は、対象のメソッドの前記時間の平均時間が所定の閾値よりも小さい場合、前記対象のメソッドに対する前記デコンパイル手段によるデコンパイルを禁止することを特徴とする請求項1に記載の情報処理装置。

請求項8

前記デコンパイルに関する情報は、前記コンパイル手段によりコンパイルが行われてから前記デコンパイル手段にデコンパイルが行われるまでの時間であり、前記禁止手段は、対象のメソッドの前記時間の平均時間が所定の閾値よりも大きい場合、前記対象のメソッドに対する前記デコンパイル手段によるデコンパイルを禁止することを特徴とする請求項1に記載の情報処理装置。

請求項9

動的コンパイル手段が、仮想マシンが実行するメソッドをコンパイルしてネイティブコードに変換する動的コンパイル工程と、デコンパイル手段が、前記ネイティブコードをデコンパイルするデコンパイル工程と、記録手段が、前記デコンパイル工程で行われたデコンパイルに関する情報を記録する記録工程と、禁止手段が、前記デコンパイルに関する情報に基づき、前記デコンパイル工程におけるデコンパイルを禁止する禁止工程と、を有することを特徴とする情報処理方法

請求項10

コンピュータを、仮想マシンが実行するメソッドをコンパイルしてネイティブコードに変換する動的コンパイル手段と、前記ネイティブコードをデコンパイルするデコンパイル手段と、前記デコンパイル手段により行われたデコンパイルに関する情報を記録する記録手段と、前記デコンパイルに関する情報に基づき、前記デコンパイル手段によるデコンパイルを禁止する禁止手段と、を有することを特徴とする情報処理装置として機能させるためのコンピュータプログラム

技術分野

背景技術

0002

Java(登録商標)仮想マシンのように、仮想マシンによって実行されるメソッドの処理を中間コードからネイティブコードに変換することで、メソッドの処理時間を高速化する動的コンパイラ技術がある。中間コードとは、Javaにおけるバイトコードのことであり、仮想マシンを実行するマイクロプロセッサやOSに依存せず、仮想マシンが逐一解釈、実行可能な言語のことである。一方、ネイティブコードとは、マシン語など、プログラムを実行するマイクロプロセッサが直接解釈及び実行可能な言語のことである。通常、中間コードよりもネイティブコードのほうが高速に処理される。

0003

このような動的コンパイラ技術では、コンパイルして変換したネイティブコード(コンパイル済みコード)を保存するためのコードキャッシュ領域が限られる。この限られたコードキャッシュ領域を効率的に使うため、コードキャッシュ領域の空きがどれくらいかを調べ、足りなくなるとあまり使われていないコンパイル済みコードに対してデコンパイル処理を行う。そしてコードキャッシュ領域からコンパイル済みコードが削除される。

0004

特許文献1に開示の「コードを投機的に最適化するための方法」では、コンパイル済みコードを辞書に入れておき、辞書の内容に変化が検出された場合に、必要のなくなったコンパイル済みコードを無効化する。

0005

特許文献2に開示の「仮想機械用プログラムのコンパイル対象指定方法」では、コンパイル対象から除外したいメソッドを、プログラムの階層構造を使って指定することを可能としている。これにより、コンパイルしたくないプログラム部分を容易に除外することができる。

0006

特許文献3には、キー操作、描画等の特定の機能を有する部分プログラムコンパイル済みキャッシュ領域に格納されている場合に、削除対象にしないことが開示されている。

先行技術

0007

特開2013−228845号公報
特開2002−163115号公報
特願2002−278301号公報

発明が解決しようとする課題

0008

しかしながら、特許文献1の方法においては、必要なくなったと判断された時点でコンパイル済みコードを無効化してしまうため、その後、無効化した部分が再び必要になった時に再度コンパイル処理を行わなければならない。

0009

また、特許文献2の方法においては、コンパイルするかどうかの判断の方法であって、コードキャッシュ領域内のコンパイル済みコードをどのようにデコンパイルするかどうかの方法に関しては言及していない。また、特許文献3の方法においては、特定の機能の場合にデコンパイル処理を行わないことについて述べている。しかしながら、いずれの引用文献においても、コンパイル済みコードがキャッシュ圧迫してしまいことに対して、十分な対応がなされていなかった。

0010

本発明は、上記課題を鑑みてなされたものであり、コンパイル済みコードによるキャッシュ圧迫をより効率的に防止することを目的とする。

課題を解決するための手段

0011

上記課題を解決するために、本発明に係る情報処理装置は、仮想マシンが実行するメソッドをコンパイルしてネイティブコードに変換する動的コンパイル手段と、前記ネイティブコードをデコンパイルするデコンパイル手段と、前記デコンパイル手段により行われたデコンパイルに関する情報を記録する記録手段と、前記デコンパイルに関する情報に基づき、前記デコンパイル手段によるデコンパイルを禁止する禁止手段と、を有することを特徴とする。

発明の効果

0012

本発明によれば、コンパイル済みコードによるキャッシュ圧迫をより効率的に防止することが出来る。

図面の簡単な説明

0013

実施形態1に係るシステムの構成を示すブロック図
実施形態1の機能構成
実施形態1のフローチャート
実施形態2の機能構成図
実施形態2のコンパイル処理のフローチャート
実施形態2のデコンパイル処理のフローチャート
実施形態2のコンパイル・デコンパイル時系列
実施形態3のコンパイル処理のフローチャート
実施形態3のデコンパイル処理のフローチャート
実施形態4のコンパイル時系列図
実施形態4のコンパイル処理のフローチャート
実施形態4のデコンパイル処理のフローチャート
実施形態6の機能構成図
実施形態6のフローチャート
実施形態7のソフトウェア構成の一例を示す図

実施例

0014

(実施形態1)
本実施形態の投影装置ハードウェア構成について、図1のブロック図を参照して説明する。図1における100はデコンパイルの禁止装置全体を示す。デコンパイルの禁止装置は、一般的なコンピュータプログラムにより動作するパーソナルコンピュータ(情報処理装置)と同様の構成である。CPU101はシステム制御部でありデコンパイルの禁止装置全体を制御する。ROM102は変更を必要としないプログラムやパラメータを格納する読み取り専用メモリである。RAM103は外部装置などから供給されるプログラムやデータを一時記憶する書き換え可能なメモリである。104は、マウスキーボードなど、各種データおよびコマンドの入力をおこなうための入力I/Fである。105は、デコンパイルの禁止装置に固定して設置されたハードディスクメモリカード、あるいはデコンパイルの禁止装置から着脱可能なメモリカードやフレキシブルディスクICカードなどの外部記憶部である。106は101〜105の各ユニット通信可能に接続するシステムバスである。図2は、本発明の実施形態1に係るシステムの機能構成図である。また、図3は本発明の実施形態1に係るフローチャート図である。

0015

次に、本実施形態におけるデコンパイルの禁止装置200のソフトウェア構成の一例を、図2を用いて説明する。

0016

デコンパイルの禁止装置200は、本実施形態におけるデコンパイルの禁止装置である。デコンパイルの禁止装置200を実行するプログラムは、ROM102に格納されており、CPU101によってRAM103上にプログラムが読み込まれ、実行される。

0017

仮想マシンでは、よく使われるメソッドの中間コードが、動的コンパイラによって動的にコンパイル処理され、そのコンパイル済みコードがRAM103または外部記憶部105のコードキャッシュ領域に記録されていく。

0018

コードキャッシュ不足判定部201は、コードキャッシュ領域には限りがあるため、もうこれ以上コンパイル結果を記録できないことを判定する処理を行う。まだコードキャッシュ領域に空きがあればコンパイル結果をRAM103または外部記憶部105に記録する。コードキャッシュ領域に空きがなければ、デコンパイルメソッド選択部202において、コードキャッシュ領域内に存在するコンパイルされたメソッドの中からデコンパイルするメソッドを選ぶ。デコンパイルするメソッドを選ぶ方法は、使われていないメソッドから選択される手法が一般的に使われる。

0019

デコンパイル禁止情報読み込み部203は、RAM103または外部記憶部105に記録されているメソッドにづいたデコンパイル禁止情報を読み込む。デコンパイル禁止判定部204は、デコンパイル禁止情報読み込み部203で読み込まれた情報からデコンパイル禁止であるかどうかを判定する。デコンパイル禁止であった場合には、デコンパイルメソッド選択部202に戻り次のデコンパイルするメソッドを選択する。デコンパイル禁止でなかった場合には、デコンパイル回数読み込み部205において、RAM103または外部記憶部105に記録されているメソッドに紐づいたデコンパイル回数を読み込む。

0020

デコンパイル回数判定部206は、デコンパイル回数読み込み部205で読み込まれたデコンパイル回数が、所定の閾値(Td)を越えるかどうかを判定する。デコンパイル回数が、所定の閾値(Td)を越えていれば、デコンパイル禁止情報付加部207の処理を行う。デコンパイル回数が、所定の閾値(Td)を越えていなければ、デコンパイル処理部208でデコンパイル処理を行う。

0021

デコンパイル禁止情報付加部207は、メソッドに紐づけてデコンパイル禁止であるというデコンパイル禁止情報を付加し、RAM103または外部記憶部105に記録する。そして、デコンパイルメソッド選択部202に戻り、次のデコンパイルメソッドを選択する。

0022

デコンパイル処理部208は、デコンパイル処理すなわち、コードキャッシュに記録されているコンパイルコードを削除してコードキャッシュ領域を空ける処理をおこなう。次に、デコンパイル回数記録部209に移る。

0023

デコンパイル回数記録部209は、デコンパイル回数をRAM103または外部記憶部105に記録する。通常デコンパイル回数に1加算してから記録するが、デコンパイル回数を0にしてから記録することもある。そして、コードキャッシュ不足判定部201に戻る。

0024

前記図1のCPU101がROM102とRAM103に記憶されているプログラムを実行することで実現する図2のそれぞれの機能部の構成について、フローチャート図3を用いて説明する。図3の処理は、動的コンパイルによってメソッドがコンパイルされコードキャッシュ領域にコンパイル済み結果を保存しようとした時点をStartとしている。

0025

先ず、図3の処理S301で、図2のコードキャッシュ不足判定部201を用いて、コードキャッシュ領域が足りなくなったかどうかを判定する。コードキャッシュ領域が足りていれば、そのままコンパイル済み結果をコードキャッシュ領域に保存して終了する。処理S301でコードキャッシュ領域が足りないと判定された場合には、処理S302に移り、デコンパイルメソッド選択部202を用いて、使われなくなったメソッドをデコンパイル対象として選ぶ。次に、処理S303に移り、デコンパイル禁止情報読み込み部203を用いて、選ばれたメソッドに紐づいているデコンパイル禁止情報を取り出す。そして、処理S304に移り、デコンパイル禁止判定部204を用いて、選ばれたメソッドがデコンパイル禁止かどうかを判定する。処理S304において選ばれたメソッドがデコンパイル禁止であると判定された場合には、処理S308に移り、デコンパイルメソッド選択部202を用いて、他のメソッドをデコンパイル対象として選び、処理S303に戻る。処理S304で、選ばれたメソッドがデコンパイル禁止でないと判定された場合には、処理S305に移り、デコンパイル回数読み込み部205を用いて、メソッドに紐づいているデコンパイル回数を取り出す。次に、処理S306に移り、デコンパイル回数判定部206を用いて、デコンパイル回数が、所定の閾値(Td)以上かを判定する。デコンパイル回数が、所定の閾値(Td)を越えていた場合には、処理S307に移りデコンパイル禁止情報付加部207を用いて、そのメソッドをデコンパイル禁止にするためにデコンパイル禁止の情報をメソッドに紐づけて記録する。そして、処理S308に移り他のメソッドをデコンパイル対象として選び処理を続ける。処理S306で、デコンパイル回数が、所定の閾値(Td)を越えていない場合には、処理S309に移る。処理S309では、デコンパイル処理部208を用いて、メソッドをデコンパイルしてコードキャッシュ領域からコンパイル結果を削除して、コードキャッシュ領域に空きを作る。次に、処理310に移り、デコンパイル回数記録部209を用いて、メソッドに紐づいているデコンパイル回数を1回加算して記録する。そして、処理S301に戻る。

0026

以上のように、本実施形態では、デコンパイル禁止の情報をメソッドに紐づけて、デコンパイル時に取り出してデコンパイル禁止かどうかを判定してデコンパイル禁止である場合にデコンパイル禁止とした。他の方法として、動的コンパイラが、デコンパイルするかどうかが判断するメソッドがコードキャッシュ領域内に存在できる寿命をあらわす変数に大きな値を追加することでデコンパイル禁止としてもよい。

0027

本実施形態により、メソッドのデコンパイルの繰り返しの数を記録しておき、その数が、所定の閾値を越えるものは、デコンパイル禁止とし、デコンパイル対象からはずし、デコンパイルされないようにする。これにより、一旦は、使われなくなりデコンパイルされるが、また使われるようになりコンパイルされるという処理を繰り返すメソッドが把握できる。そのようなメソッドをデコンパイル禁止とすることで、次に使われる時にコンパイル済みコードがコードキャッシュに残っているため、すぐにコンパイル済みコードを実行することができ高速な仮想マシンの動作が実現できる。そのため、無駄なデコンパイルとコンパイル処理を省くことができる。

0028

(実施形態2)
メソッドがコンパイルされてから(間にデコンパイルがあり)再度コンパイルされるまでの平均時間が短い場合には、そのメソッドをデコンパイル禁止にする実施形態について説明する。

0029

図1のCPU101がROM102とRAM103に記憶されているプログラムを実行することで実現する図4のそれぞれの機能部の構成について、フローチャート図5を用いて説明する。説明中のメソッド毎に紐づけて保存されているコンパイルからコンパイルまでの平均時間Cc変数は最初0に初期化されている(Cc=0)とする。

0030

図5の処理は、動的コンパイルによって良く使われるメソッドをコンパイルしようとした時点をStartとしている。先ず、図5のS501で、図4のコンパイルメソッド選択部401を用いて、よく使われるメソッドをコンパイル対象として選ぶ。次に、処理S502に移り、平均時間取得部402を用いて、メソッドに紐づけて保存されているコンパイルからコンパイルまでの平均時間Ccを取得する(平均時間取得値を変数Ccに代入)。次に処理S503に移り、図1のCPU101を用いて、取得した平均時間Ccが0(初期状態)かどうかを判定する。平均時間Ccが0ではない場合には処理S504に移り、取得した平均時間Ccが、所定の閾値Tcよりも小さいかどうかを判定する。平均時間Ccが、所定の閾値Tcよりも小さい場合には、処理S505に移り、デコンパイル禁止情報付加部404を用いて、そのメソッドをデコンパイル禁止にするために、デコンパイル禁止情報をメソッドに紐づけて記録する。そして、処理S511に移りメソッドをコンパイルし、処理を終了する。このように、S505でデコンパイル禁止にされたメソッドに関しては、S511でコンパイルされているため、コンパイル済みコードとなるのでコンパイル対象としては選ばれず、本コンパイル処理には来なくなる。

0031

処理S504で、平均時間Ccが、所定の閾値Tcよりも大きいと判定された場合には、処理S506に移り、コンパイル時間取得部403を用いて、メソッドに紐づけて保存されている以前のコンパイル時間を取得する(その値を変数Ctに代入)。次に、処理S507で、現在時刻から以前のコンパイル時間(Ct)を引き、コンパイルからコンパイルまでの時間を求めて、コンパイルからコンパイルまでの平均時間に足す。

0032

Cc=Cc+(現在時刻−Ct)
そして、処理S508に移り、コンパイルからコンパイルまでの平均時間を算出する。

0033

Cc=Cc/2
そして、処理S509で、平均時間記録部405を用いて、コンパイルからコンパイルまでの平均時間(Cc)をメソッドに紐づけて保存する。さらに続いて、処理S510で、コンパイル時間記録部406を用いて、現在時刻をメソッドに紐づけてコンパイル時間(Ct)として保存する。そして処理S511において、コンパイル処理部407を用いて、メソッドをコンパイルし、処理を終了する。

0034

処理S503において、平均時間Ccが0であった場合には、処理S512において取得した平均時間Ccに、所定の閾値Tcを代入して(Cc=Tc)初期値とする。そして、処理S509で平均時間Ccをメソッドに紐づけて保存し、S510で現在時刻をコンパイル時間としてメソッドに紐づけて保存し、S511でメソッドをコンパイルする。これにより、最初のコンパイル時にメソッドに紐づけて保存する変数を初期化して保存してから、S501に戻る。

0035

次に、デコンパイル時にメソッドにデコンパイル禁止情報がついている場合にデコンパイル対象として選ばれない処理のフローを図6のフローチャートを用いて説明する。

0036

S601において、コードキャッシュ領域が足りなくなったかを判定して、足りなくなければ処理を終了する。足りない場合には処理S602に移り、使われなくなったメソッドをデコンパイル対象として選ぶ。次に処理S603に移り、対象として選ばれたメソッドに、デコンパイル禁止情報がついているかを判定する。デコンパイル禁止情報がついていれば、処理S604でそのメソッドをデコンパイルせずに他のメソッドをデコンパイル対象として選ぶ。そして、処理S603に戻り処理を繰り返す。S603でデコンパイル禁止フラグがついていなければ、処理S605に移り選ばれたメソッドをデコンパイルし、処理を終了する。

0037

以上により、コンパイルされてから再度コンパイルされるまでの平均時間が短い場合にデコンパイル禁止にすることで、コンパイル済み結果をそのまま使えるため、無駄なデコンパイルとコンパイルを省くことが可能となる。

0038

(実施形態3)
メソッドがデコンパイルからコンパイルまでの平均時間が短いメソッドをデコンパイル禁止にする実施形態について説明する。

0039

図7は、あるメソッドのコンパイルとデコンパイルを行った時点を時間軸上にプロットして示している図である。図7(a)は、デコンパイルからコンパイルの時間が長い場合を表している。図7(b)のようにデコンパイルからコンパイルの時間が短いものは、メソッドが使用されていなくデコンパイル対象になってデコンパイルされてしまったが、すぐによく使用されるようになりコンパイルされたことを表している。デコンパイルからコンパイルの時間が短い場合には、デコンパイル禁止にしておけば、コンパイル済み結果をそのまま使えて、無駄なデコンパイルとコンパイルを省くことが可能となる。

0040

以下に図1のCPU101がROM102とRAM103に記憶されているプログラムを実行することで実現する処理について、フローチャート図8図9を用いて説明する。説明中の平均時間Dc変数は最初0に初期化されている(Dc=0)とする。

0041

図8の処理は、動的コンパイルによって良く使われるメソッドをコンパイルしようとした時点をStartとしている。先ず、図8の処理S801で、メソッドに紐づけて保存されている以前のデコンパイル時間を取得する(その値を変数Ctに代入)。次に処理S802に移り、現在時刻から以前のデコンパイル時間(Ct)を引き、デコンパイルからコンパイルまでの時間を求めて、デコンパイルからコンパイルまでの平均時間に足す。

0042

Dc=Dc+(現在時刻−Ct)
デコンパイルからコンパイルまでの平均時間を算出する
Dc=Dc/2
次に処理S804に移り、デコンパイルからコンパイルまでの平均時間(Dc)をメソッドに紐づけて保存する。そして、処理S805に移りメソッドをコンパイルして処理を終える。

0043

次に、図9のフローチャートを用いてデコンパイル時の処理を説明する。

0044

先ず処理S901で、使われなくなったメソッドをデコンパイル対象として選ぶ。次に、処理S902に移り、選ばれたメソッドに紐づいているデコンパイル禁止情報を取り出す。そして、処理S903に移り、選ばれたメソッドがデコンパイル禁止かどうかを判定する。処理S903において選ばれたメソッドがデコンパイル禁止であると判定された場合には、処理S904に移り、選ばれたメソッドはデコンパイルせずに、他のメソッドをデコンパイル対象として選び、処理S902に戻る。

0045

処理S903において、選ばれたメソッドがデコンパイル禁止でなかった場合には、処理S905に移り、メソッドに紐づけて保存されている以前のデコンパイルからコンパイルまでの平均時間を取得する(その値を変数Dcに代入)。次に、処理S906に移りメソッドに紐づけて保存されているデコンパイル〜コンパイル平均時間Dcが0か(初めてのデコンパイルか)を判定する。処理S906で平均時間Dcが0であると判定された場合には、処理S907に移り、デコンパイルからコンパイルまでの平均時間Dcに、所定の閾値Tcを代入する(Dc=Tc)。

0046

処理S908で、デコンパイルからコンパイルまでの平均時刻Dcをメソッドに紐づけて保存する。そして、処理S911に移る。

0047

処理S906で、平均時間Dcが0でないと判定された場合には、処理S909に移る。処理S909では、メソッドに紐づけて保存されているデコンパイル〜コンパイル平均時間Dcが所定の閾値Tcより小さいかどうかを判定する。処理S909で平均時間Dcが所定の閾値Tcより小さいと判定された場合には、処理S910に移り、メソッドに紐づけてデコンパイル禁止であるというデコンパイル禁止情報を保存する。そして、処理S904に戻る。

0048

処理S909において、平均時間Dcが所定の閾値Tcより大きいと判定された場合には、処理S911に移る。処理S911では、現在時刻をメソッドに紐づけて保存(その値を変数Ctに保持)する。そして、処理S912に移り、メソッドをデコンパイルして、コンパイル結果を削除してコードキャッシュに空きを作り処理を終了する。

0049

以上により、メソッドのデコンパイルからコンパイルの平均時間が短い場合に、デコンパイル禁止にすることで、コンパイル済み結果をそのまま使えるため、無駄なデコンパイルとコンパイルを省くことが可能となる。

0050

(実施形態4)
メソッドがコンパイルされてからデコンパイルされるまでの平均時間が長いメソッドをデコンパイル禁止にする実施形態について説明する。

0051

図10は時間軸上で、あるメソッドのコンパイルとデコンパイルの発生個所をあらわしている。図10(a)のように、コンパイルからデコンパイルの間の時間が短いということは、短い期間に、多くの処理が起こり多くのメソッドに対して頻繁にコンパイル処理が起こって、コードキャッシュが足りなっていることを表す。そしてその期間に、使われなかったメソッドがデコンパイルされたことをあらわす。この状況下では、すぐにコードキャッシュが足りなくなる状態なので、デコンパイル禁止フラグをつけて現在使われていないメソッドのコンパイル済み結果をコードキャッシュに残り続けさせるのはよくない。逆に、図10(b)のようにコンパイルからデコンパイルの時間が長いメソッドであれば、ゆるやかにコンパイル処理が起こっている状況下で、他のメソッドへの影響も少ない。また、それだけ長い間コードキャッシュに生存して使われているメソッドであったことを示しており、次に使われる可能性が高いと判断して、デコンパイル禁止とする。

0052

次に、図11のフローチャートを用いてコンパイル時の処理を説明する。説明中のメソッド毎に紐づけて保存されているコンパイルからデコンパイルまでの平均時間Cd変数は最初0に初期化されている(Cd=0)とする。

0053

コンパイルからデコンパイルまでの平均時間を算出するために、コンパイル時の処理では、先ず、処理S1101で、現在時刻をメソッドに紐づけて保存する。そして、処理S1102に移り、メソッドをコンパイルする。

0054

次に、図12のフローチャートを用いてデコンパイル時の処理を説明する。

0055

先ず処理S1201で、使われなくなったメソッドをデコンパイル対象として選ぶ。次に、処理S1202に移り、選ばれたメソッドに紐づいているデコンパイル禁止情報を取り出す。そして、処理S1203に移り、選ばれたメソッドがデコンパイル禁止かどうかを判定する。処理S1203において選ばれたメソッドがデコンパイル禁止であると判定された場合には、処理S1204に移り、選ばれたメソッドはデコンパイルせずに、他のメソッドをデコンパイル対象として選び、処理S1202に戻る。

0056

処理S1203において、選ばれたメソッドがデコンパイル禁止でなかった場合には、処理S1205に移り、メソッドに紐づけて保存されている以前のコンパイルからデコンパイルまでの平均時間を取得する(その値を変数Cdに代入)。次に、処理S1206に移りメソッドに紐づけて保存されているコンパイルからデコンパイル平均時間Cdが0か(初めてのデコンパイルか)を判定する。処理S1206で平均時間Cdが0であると判定された場合には、処理S1207に移り、コンパイルからデコンパイルまでの平均時間Cdに、所定の閾値Tcを代入する(Cd=Tc)。次に、S1213に移り、コンパイルからデコンパイルまでの平均時刻Cdをメソッドに紐づけて保存する。

0057

処理S1206で、平均時間Cdが0でないと判定された場合には、処理S1208に移る。処理S1208では、メソッドに紐づけて保存されているコンパイルからデコンパイルまでの平均時間Cdが所定の閾値Tcより大きいかどうかを判定する。処理S1208で平均時間Cdが所定の閾値Tcより大きいと判定された場合には、処理S1209に移り、メソッドに紐づけてデコンパイル禁止であるというデコンパイル禁止情報を保存する。そして、処理S1204に戻る。

0058

処理S1208において、平均時間Cdが所定の閾値Tcより小さいと判定された場合には、処理S1210に移る。処理S1210では、メソッドに紐づけて保存されている以前のコンパイル時間を取得する(その値を変数Ctに代入する)。次に処理S1211に移り、現在時刻から以前のコンパイル時間(Ct)を引き、コンパイルからデコンパイルまでの時間を求めて、コンパイルからデコンパイルまでの平均時間に足す。

0059

Cd=Cd+(現在時刻−Ct)
そして、処理S1212に移り、コンパイルからデコンパイルまでの平均時間を算出する。

0060

Cd=Cd/2
そして、処理S1213に移り、コンパイルからデコンパイルまでの平均時間(Cd)をメソッドに紐づけて保存する。そして、処理S1214に移り、メソッドをデコンパイルしてコンパイル結果を削除して、処理を終了する。

0061

以上により、コンパイルされてからデコンパイルされるまでの平均時間が長いメソッドを、次に使われる可能性が高いと判断してデコンパイル禁止にすることで、無駄なデコンパイルとコンパイルを省くことが可能となる。

0062

(実施形態5)
実施形態3は、「デコンパイルからコンパイルまでの平均時間が短いメソッドをデコンパイル禁止にする」方法であった。実施形態4は「コンパイルからデコンパイルまでの平均時間が長いメソッドをデコンパイル禁止にする」方法であった。両方の方法を組み合わせて、「デコンパイルからコンパイルまでの平均時間が短い」かつ「コンパイルからデコンパイルまでの平均時間が長い」メソッドをデコンパイル禁止にする。この方法で、より精度の高いデコンパイル禁止方法が実現できる。

0063

さらには、それぞれの方法に、実施形態1の「デコンパイル回数が多いメソッドをデコンパイル禁止にする」方法を組み合わせることによっても、より精度の高いデコンパイル禁止方法が実現できる。また、実施形態2の「コンパイルからコンパイルまでの平均時間が短いメソッドをデコンパイル禁止にする」方法を組み合わせることによっても、より精度の高いデコンパイル禁止方法が実現できる。

0064

(実施形態6)
デコンパイル禁止のメソッドが増えてしまうとコードキャッシュが足りなくなってしまう問題が発生する。そこで、デコンパイル禁止にしてコードキャッシュ領域の中にコンパイル済みコードを残しておいても、やはり使われないというメソッドを検出してデコンパイル禁止を解除する。デコンパイル禁止にした時点から、デコンパイル対象に選ばれる回数(デコンパイル対象選択回数)を記録しておき、デコンパイル対象選択回数が、所定の閾値を越えた場合には、デコンパイル禁止を解除する方法を説明する。

0065

前記図1のCPU101がROM102とRAM103に記憶されているプログラムを実行することで実現する図13のそれぞれの機能部の構成について、フローチャート図14を用いて説明する。

0066

図13の機能構成図は、本実施形態におけるデコンパイル禁止解除装置1300のソフトウェア構成の一例である。また、図13は、実施形態1で用いた図4の機能構成図に、デコンパイル禁止情報解除部1310を追加し、機能の流れを調整した図である。

0067

図14の処理は、動的コンパイルによってメソッドがコンパイルされコードキャッシュ領域にコンパイル済み結果を保存しようとした時点をStartとしている。

0068

図14の処理S301からS303までは、実施形態1の説明と同様の処理を行う。処理S303で、選ばれたメソッドに紐づいているデコンパイル禁止情報を取り出した後、処理S305に移る(実施形態1とはS304とS305の呼びだす順番違う)。処理S305では、図13のデコンパイル回数読み込み部205を用いて、メソッドに紐づいているデコンパイル回数を取り出す。次に処理S304に移り、図13のデコンパイル禁止判定部204を用いて、選ばれたメソッドがデコンパイル禁止かどうかを判定する。処理S304において選ばれたメソッドがデコンパイル禁止であると判定された場合には、処理S1401に移り、デコンパイル対象選択回数記録の処理を行う。デコンパイル対象選択回数記録は、デコンパイル回数記録部209を用いて、メソッドに紐づいているデコンパイル回数を1回加算してから記録する。次に処理S1402に移り、デコンパイル回数が、所定の閾値(Td2)以上かどうかをデコンパイル回数判定部206を用いて判定する。処理S1402でデコンパイル回数が、所定の閾値(Td2)より小さい場合には処理S308に移り、デコンパイルメソッド選択部202を用いて、他のメソッドをデコンパイル対象として選び、処理S303に処理を戻す。処理S1402でデコンパイル回数が、所定の閾値(Td2)以上であった場合には処理S1403に移り、デコンパイル禁止情報解除部1310を用いて、デコンパイル禁止情報を解除する。次に、処理S1404に移り、デコンパイル回数記録部209を用いて、デコンパイル回数を0にしてからメソッドに紐づけて記録する。そして処理S308に処理を戻す。所定の閾値(Td2)の値を調整することによって、メソッドのデコンパイル禁止状態を保ち、コードキャッシュ領域内にどれくらい残しておくかを調整することが可能である。所定の閾値(Td2)の値が大きければ大きいほどメソッドがデコンパイルされない期間が長くなる。

0069

処理S304において選ばれたメソッドがデコンパイル禁止でないと判定された場合には、処理S306に移り、デコンパイル回数判定部206を用いて、デコンパイル回数が、所定の閾値(Td)以上かを判定する。処理S306でデコンパイル回数が、所定の閾値(Td)を越えていたと判定された場合には、処理S307に移る。そして、デコンパイル禁止情報付加部207を用いて、そのメソッドをデコンパイル禁止にするために、デコンパイル禁止情報をメソッドに紐づけて記録する。そして、処理S1404に移り、デコンパイル回数記録部209を用いて、デコンパイル回数を0にしてからメソッドに紐づけて記録して、処理S308に処理を戻す。

0070

処理S306でデコンパイル回数が、所定の閾値(Td)を越えていないと判定された場合には、処理S309に移る。処理S309では、デコンパイル処理部208を用いて、メソッドをデコンパイルしてコードキャッシュ領域からコンパイル結果を削除して、コードキャッシュ領域に空きを作る。次に、処理310に移り、デコンパイル回数記録部209を用いて、メソッドに紐づいているデコンパイル回数を1回加算して記録する。そして、処理S301に戻る。

0071

以上により、メソッドをデコンパイル禁止にした後も、メソッドのデコンパイル対象への選ばれ方を調査してデコンパイル禁止を解除する方法を持つことで、コードキャッシュ領域が足りなくなることを防ぐことが可能となる。

0072

(実施形態7)
図15の1500は、1501の仮想マシン上に、1502のアプリケーションフレームワークが搭載されて、複数のアプリケーション(1503,1504,1505,…)が一つの仮想マシン上で動作するシステムである。アプリケーションフレームワークは、アプリケーションのインストールアンインストール起動・停止を行う。

0073

アプリケーションが、アプリケーションフレームワークによってアンインストールや停止された場合には、アプリケーションが使用していたメソッドは必要なくなる。

0074

今、アプリケーションが使用していたメソッドが、仮想マシン内の1506の動的コンパイラによってコンパイルされ、本発明の方式を用いてデコンパイル禁止手段1507によってデコンパイル禁止になっているとする。アプリケーションがアンインストールや停止されたことを検知した場合には、アプリケーションの使用していたメソッドのデコンパイル禁止をデコンパイル禁止解除手段1508によって解除する。このメソッド不使用検知によってデコンパイル禁止解除処理を行うことにより、使用されないメソッドがデコンパイル対象になるため、動的コンパイラ1506によってデコンパイルされる。これにより、コードキャッシュ領域を有効に使う事ができる。

0075

(実施形態8)
実施形態6や7の方法を用いて、デコンパイル禁止を解除することが決定されたメソッドのコンパイル済みコードを図1の外部記憶部105にコードキャッシュ領域から移し、コードキャッシュ領域に空きを作る。

0076

そして、そのメソッドがよく使われるようになった場合には、コンパイル処理の代わりに、外部記憶部105からコンパイル済みコードをコードキャッシュ領域内に戻すコードキャッシュ領域内移動処理を行う。これにより、再度コンパイルする必要がなくなる。これにより、デコンパイル禁止のメソッドが増えてしまうとコードキャッシュ領域が足りなくなることを防ぎつつ、余計なコンパイル処理を省くことが可能になる。

0077

(他の実施形態)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。

0078

200 デコンパイル禁止装置
201コードキャッシュ不足判定部
202 デコンパイルメソッド選択手段
203 デコンパイル禁止情報読み込み部
204 デコンパイル禁止判定部
205 デコンパイル回数読み込み部
206 デコンパイル回数判定部
207 デコンパイル禁止情報付加部
208 デコンパイル処理部
209 デコンパイル回数記録部

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

技術視点だけで見ていませんか?

この技術の活用可能性がある分野

分野別動向を把握したい方- 事業化視点で見る -

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

  • 株式会社アクシオの「 遠隔操作システム及びプログラム」が 公開されました。( 2020/01/30)

    【課題】後着優先のリモートデスクトップ接続を利用したシステム(特に、RPAシステム)の運用を円滑化できる遠隔操作システム及びプログラムを提供する。【解決手段】遠隔操作システムは、所定のソフトウェアがイ... 詳細

  • アビニシオテクノロジーエルエルシーの「 データ処理グラフのコンパイル」が 公開されました。( 2020/01/23)

    【課題】グラフに基づくプログラムのコンパイルにおいて、計算のレイテンシーと計算の効率との間のトレードオフを実現する方法を提供する。【解決手段】グラフに基づくプログラムの仕様である処理グラフ900が、動... 詳細

  • オムロン株式会社の「 制御装置および制御方法」が 公開されました。( 2020/01/16)

    【課題】共有変数を定義するプログラムが複数存在する場合、変数名が衝突し意図せずにデータを上書きすることを防止する。【解決手段】制御装置(1)は、プログラム管理部(11)と、データ記憶部(13a)と、共... 詳細

この 技術と関連性が強い技術

関連性が強い 技術一覧

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ