JP2012506094A - ランタイムにおいて生成したコードのキャッシュへの格納 - Google Patents

ランタイムにおいて生成したコードのキャッシュへの格納 Download PDF

Info

Publication number
JP2012506094A
JP2012506094A JP2011532141A JP2011532141A JP2012506094A JP 2012506094 A JP2012506094 A JP 2012506094A JP 2011532141 A JP2011532141 A JP 2011532141A JP 2011532141 A JP2011532141 A JP 2011532141A JP 2012506094 A JP2012506094 A JP 2012506094A
Authority
JP
Japan
Prior art keywords
code
cache
runtime
entity
generated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2011532141A
Other languages
English (en)
Other versions
JP5518085B2 (ja
JP2012506094A5 (ja
Inventor
ヘリング ネイサン
シー.ライトン デイビッド
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2012506094A publication Critical patent/JP2012506094A/ja
Publication of JP2012506094A5 publication Critical patent/JP2012506094A5/ja
Application granted granted Critical
Publication of JP5518085B2 publication Critical patent/JP5518085B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

コードを生成させるがグローバルステートを混乱させないプログラムエンティティが識別される。それが実行された最初のときに識別されたプログラムエンティティにより生成されたコードに識別子を割り当てることができ、キャッシュに格納することができる。プログラムエンティティの次の実行ではコードの生成および/又は生成したコードのネイティブバイナリコードへの変換を省略することができる。マシン全体にわたるキャッシュに、ランタイムに生成したコードとネイティブバイナリコードを格納することができ、又は、プログラムエンティティのソースコードから生成したアセンブリのメタデータに追加することができる。

Description

従来、コンパイラのソフトウェアはネイティブコード、すなわち、コードを実行するマシンに特有であるバイナリ(二進)コードを作成する。従来のコンパイラによって作成された(アンマネージメントの)ネイティブコードは、一般的にオペレーティングシステムがそのコードをランさせるために必要なすべてを含んでいるが、それ以外にほとんど含んでいない。その一方、仮想計算機の環境では、ソースコードは、どのようなマシンにも特定されない中間バイトコード(intermediate byte code)の表現にコンパイルされる。付け加えると、マネージドコードのコンパイラにより生産されたものは、一般的に、バイナリコードよりもかなり多くの情報を含んでいる。追加された情報はバイナリコードの特徴を説明しており、メタデータと呼ばれることもある。これは、他のデータを説明するためのデータの用語の総称であるが、この場合、その表現されたデータは、そのバイナリコードである。中間バイトコードやメタデータを含んだコンテナは、マネージドアセンブリと呼ばれることもある。これらのコンテナは、また、JAVA(登録商標)アーカイブまたはJAVAモジュールのクラスファイルとしてあらわされる。「アセンブリ」または「マネージドアセンブリ」という言葉は、本明細書ではそのようなバイトコードやメタデータのコンテナをあらわしている。
アンマネージドの環境においては、ランタイムにおいて、予め用意されているネイティブの命令がメモリにロードされ、実行される。マネージメントの環境では、ランタイムにおいて、実行直前に、マネージドアセンブリをネイティブバイナリの命令にコンパイル、すなわち変換することができる。つまり、マネージメントアセンブリをメモリにロードし、ジャストインタイム(JIT)又はオンザフライのコンパイラにより、その後実行されるマシン又はランタイムに特有の命令へコンパイルすることができる。マネージド環境下でのコンパイル/変換段階は実行に影響する付加的な処理を含む可能性があるが、他方で、JIT/オンザフライのコンパイルはアンマネージメント環境下では活用できない環境特有の最適化ができる可能性がある。たとえば、JIT/オンザフライのコンパイルが、実行しているコードが全面的な信頼によりランしていることを認識している場合には、アンマネージメント環境下では飛ばすことのできなかったいくつかの信頼できる高価なセキュリティーチェックを飛ばすことができる。
マネージドの環境においては、実行直前にマネージドアセンブリをコンパイルする代わりに、ソースコードまたは中間バイトコードを最適化コンパイラによりネイティブバイナリコードにコンパイルしたり、ホストシステムで実行される前に記録(キャッシュへの格納)したりすることができる。例えば、NGENのようなネイティブイメージジェネレータは、アセンブリの実行の要求が受け取られる前に中間バイトコードをバイナリのネイティブマシン命令へ変換することにより、その環境のためのネイティブバイナリイメージを作成する可能性がある。こうして、ランタイムにおいて、2度目のコンパイラ/変換段階無しで、予め用意した実行コードがロードされ、実行される。つまり従来のネイティブコードの環境の段階と同様に実行される。たとえキャッシュへの格納がランタイムにおけるJIT/オンザフライのコンパイル/変換を削除することにより、アセンブリをより早く実行することを目的としていても、上述の最適化のようなJIT/オンザフライのコンパイラ/変換により作られた環境特有の最適化はあらかじめアセンブリをキャッシュに格納するときに行うことは不可能であるため、パフォーマンスは改善されないであろう。
上記のとおり、ほとんどのネイティブ言語はソースコードの内部構造について記録していない。その一方で、マネージドの環境において生成された中間バイトコードと一緒に含まれたメタデータのために、現在有するオブジェクトを活用でき、新しいオブジェクトを生成し、存在するオブジェクトから引き継いだりするコードは、ランタイムにおいて、すぐに生じる。ランタイムにおいて生成したコードは、ランタイムにおいて生成した長期ストレージ媒体(例えば、ハードディスク)からのコードをロードすることなしに動的コードを作成もしくはロードすることに使用される特別な機能を必要とするだろう。そのような機能は、以下の文章においてリフレクションエミット(Reflection Emit)と呼ぶ。ランタイムにおいて生成したコードは、ダイナミックジェネレーティッドコードと呼ばれているが、一般的に各プロセスインスタンスの間に中間バイトコードにコンパイルされ、また、その後、JIT/オンザフライのコンパイルにより処理される。これは、重要となりうるすべての加工費である。
マネージドアセンブリのようなエンティティ、又はメソッド又は関数のようなマネージドアセンブリ一部が、ランタイムにおいて追加のコードを生成した場合、そのメソッド又は関数が純粋な場合、追加のランタイムに生成したコードは、キャッシュに格納されるため、以降のエンティティの実行において、キャッシュに格納されたランタイムに生成したコードを、その識別子をルックアップしキャッシュから識別されたコードを検索することによりキャッシュから検索することができ、一または複数のコード生成段階を回避することができる。その上、コンパイラはキャッシュコードを事前コンパイルすることができ、および/又は、特別なデータとしてソースアセンブリのメタデータに加えることができる。したがって、ランタイムに生成したコードをキャッシュに格納し、プログラムのインスタンスを超えて再利用することができる。ランタイムにおいて、一以上のランタイムに生成したコードのキャッシュは検査され、そのキャッシュの中に識別されたエンティティが含まれている場合には、それはロードされ使用され、中間コード生成段階、コンパイル・変換段階又は中間コード生成段階とコンパイル・変換段階の両方が除外される。
本「発明の概要」は、以下「発明を実施するための形態」でさらに述べる概念を選択して簡略化した形式で紹介するために提供するものである。本「発明の概要」は、請求の主題の重要な特徴または主要な特徴を特定することを意図しておらず、請求の主題の範囲を決定する際の援助として使用されることも意図していない。
本明細書に開示された主題の態様に従って、ランタイムにおいて生成したコードをキャッシュに格納するシステムの一例のブロック図である。 当技術分野で周知のような動的プログラムを実行するための方法である。 本明細書に開示された主題の態様に関連する、ランタイムにおいて生成したコードをキャッシュに格納するための方法の一例である。 本明細書に開示された主題の態様に関連する、ランタイムにおいて生成したコードをキャッシュに格納するための方法の他の一例である。 本明細書に開示された主題の態様が実現されるコンピューティング環境の一例を示すブロック図である。 本明細書に開示された態様に関する統合された開発環境の一例のブロック図である。
リフレクションエミットはランタイムにおいて追加されたプログラムの命令を動的に生成し、起動するための機構である。すなわち、ランタイムにおいて適用できるデータ、サービス、および特別な操作に基づいて、プログラムの基本設計概念それ自体をランタイムにおいて決定することができる。例えば、特別なプログラムが数学的操作を実行し、ユーザーが特定のサイズのマトリックスに基づいて計算することを望んでいると仮定する。ひとつの方法としては、どのサイズのマトリックスにおいても計算を実行できる包括な関数を書くことである。このような関数は静的している。直接に操作するアルゴリズムが目的とする問題を解決するためである。このようなプログラムは、あらゆるサイズのマトリックスをも操作するという必要条件があるため、非効率であると思われる。他の方法としては、その問題の動的な解決方法はその問題を解決するための特別なアルゴリズムの生成を含んでいる。このような解法は、さまざまな入力変数が与えられた静的関数Aが新しい動的関数Bを生成させるためにこれらの変数のいくつかを使用することを含み、その後、他の入力変数を通り越してその動的関数となるであろう。この、カスタマイズされた動的関数は特別な入力のみに働くと思われるが、それはこのような制限された入力の一式を与えられた最高のパフォーマンスを可能にする方法で書き込まれるだろう。例えば、静的関数Aは、16×16のマトリックスを互いに乗じるという要求を受け取る。静止した関数Aは16×16のマトリックスを互いに乗じることしかできない新しい動的関数Bを生成させる。その後、静的関数Aは、動的関数Bへ現実の互いのマトリックスを乗じるタスクを委任する。
リフレクションエミットのような機構を使うことにより、ランタイムにおいて(動的な)プログラムにより付加されるものはプログラム命令となる。すなわち、例を続けてあげると、リフレクションエミットのような機構を使うことにより、最適化は、16×16のマトリックスのためのプログラムのこの特別な実行の最適化するために、ランタイムにおいてプログラムによる(動的な)包括的なプログラム命令となるであろう。リフレクションエミットのような機構によりなされた動的な変更は性能を良くし、互換性を増やしたり、他の有用な利点をもたらしたりする。オブジェクト指向環境の状況の中では、リフレクションエミットは新しいタイプの生成や新しいタイプの方法を可能にし、新しい方法を実行できるアルゴリズムを明確にできる。マネージドコードの環境の中では、リフレクションエミットを通して中間バイトコードが生成される。周知の現存するシステムでは、ランタイムにおいて生成した中間バイトコードはプログラムの作動中いつでもネイティブマシンの命令にコンパイル/変換されなければならない。
本明細書において開示された主題の態様にしたがって、最初に動的プログラムが実行されると、中間バイトコードが生成され、実行コンテクスト固有の識別子が与えられ、キャッシュに格納される。次に、プログラムがランされるとき、中間コードは再び生成されなくとも良いであろう。例えば、仮に動的関数(言い換えればランタイムにおいて中間バイトコードを生じさせる関数)が存在するとする。さらに、その関数が関数の実行中に変化する、又は変化しない2つの変数を受け取るとする。受け取った変数の値によって、異なるバイトコードが生成される。本明細書において開示された主題の態様にしたがって、変数の値と関数を生成させる動的コードの名前とに基づいた識別子は生成され、関数の実行により作成された中間バイトコードと関連付けられるであろう。識別されたバイトコードは、中間バイトコードのキャッシュかアセンブリの一部のメタデータかどちらかのキャッシュに格納される。そのため、次に同じ変数の値により関数が実行されるとき、中間バイトコードを再生する必要性が除外され、格納されたバイトコードがキャッシュから検索でき、直接メモリにロードできる。同様に、動的関数の識別子は動的関数を生成した関数により与えられた変数に基づいている。キャッシュに格納された動的関数の識別子は動的関数を生成させるために利用されるアルゴリズムに基づいている。動的関数の識別子は動的コードを生成させる関数の特別なバージョンを識別するであろう。
その上、中間バイトコードがネイティブコードに変換された場合には、ネイティブコードは、ネイティブコードのキャッシュかソースアセンブリのメタデータの一部のどちらかに格納されることができる。次にプログラムが実行されたとき、中間バイトコードの生成も、バイトコードのネイティブバイナリコードへの変換も、どちらも実行される必要はない。ネイティブバイナリコードはロードされることができ、ネイティブコードのキャッシュから直接実行される。キャッシュに格納されたネイティブバイナリコードは前段落において説明されたように識別される。
ランタイムにおいて生成したコードのキャッシュへの格納
図1は、本明細書に開示された主題の態様に従って、ランタイムにおいて生成したコードをキャッシュに格納するシステム100を示している。システム100は、一又は複数の下記の事項を含んでいる。ランタイムで生成したコードをキャッシュに格納し、および/又は中間バイトコードのキャッシュ109および/又は再生可能な(マシンコードの)実行ファイルのキャッシュ118および/又はソースアセンブリキャッシュ122のようなランタイムにおいて生成したコードのキャッシュのルックアップ操作を行い、識別されたコードをリクエスタに戻す一以上のコンポーネント120と、コンパイラ105と、JIT又はオンザフライコンパイラ110と、中間バイトコードのキャッシュ109および/又は再生可能な(マシンコードの)実行ファイルのキャッシュ118および/又はソースアセンブリキャッシュ122のような一以上のキャッシュを含む。JIT又はオンザフライコンパイラは、実行可能だが再利用不可能なネイティブコードをメモリ中に生成させる。入力変数113のような入力変数はプログラムが実行しているときに与えられる。
また、システム100は、NGEN112のようなネイティブジェネレーターを含む。ネイティブジェネレーターはネイティブバイナリ(マシン言語)の再生可能なマシンコード実行ファイル116を生成させ、記録する。再生可能なマシンコード実行ファイル116は再生可能な(マシンコード)実行ファイルのキャッシュ118に記録される。中間バイトコードは中間バイトコードのキャッシュメモリ109に記録される。ネイティブバイナリ又は中間バイトコードはソースアッセンブリのキャッシュ122に記録される。中間バイトコードのキャッシュ109と、再利用可能な(マシンコード)実行ファイルのキャッシュ118および/又はソースアセンブリのキャッシュ122はマシン全体又はシステム全体にわたるキャッシュとなる。システム100の全部又は一部は、図3との関係において以下に記述されるコンピュータのような一以上のコンピュータ上に存在する。それに関して、システム100又はその一部は、図3との関係において記述され、また下に記述されたコンピュータのような一以上のコンピュータ上に存在している、図4との関係で下に記述され例証されたコンピュータのような統合開発環境(IDE)600の一部を、包含している。あるいは、それに関して、システム100又はその一部は、独立型システム又はプラグインとして提供される。
コンパイラ105は.NETの言語で書かれたソースコードを中間バイトコード(例えば共通の中間言語、CIL)にコンパイルする.NETコンパイラを包含する。.NET言語は、Visual basic、Visual J#、 C++、C#、J#、Java Script、APL、COBOL、Pascal、Eiffel、Haskell、ML、Overon、Perl、Python、Scheme、Smalltalk又は他の.NET言語を含むが、それに限定されない。コンパイラ102はJAVAにおいて書かれたソースコードをJAVAバイトコードにコンパイルするJAVAコンパイラを包含する。
コンパイラ105は、ソースコード104を1以上のマネージドアセンブリ108等にコンパイルする。ソースコード104は動的プログラムコード、すなわち、ランタイムにおいて実行されたときに追加コードを生成するコード、例えば、ランタイムで生成した中間バイトコード111を含んでいる。マネージメントアセンブリは中間バイトコード106とメタデータ107を含んでいる。メタデータ107は、アセンブリのようなエンティティ又はアセンブリの関数やメソッドのようなアセンブリの一部がランタイムにおいてコードを生成するかどうか、又はそれがキャッシュへの格納に適しているかを識別する特別な性質に関する情報を含む。一般にキャッシュへの格納に適しているプログラムはグローバルステートを混乱させない。そのようなエンティティは「純粋」又は「純粋関数」と呼ばれる。例えば、純粋関数はグローバルステート(global state)を混乱させない。メタデータは生成した関数、動的コードの生成器へ渡される変数データ又は他の場所に組み込まれる。ソースアセンブリはソースアセンブリのキャッシュ122のようなソースアセンブリのキャッシュ(ライブラリ)において、維持される。
当技術分野において知られるように、何らかのアセンブリが実行されるとき、その実行されたアセンブリはメモリにロードされる。事前コンパイルされた実行ファイル(例えば、NGEN112のようなネイティブイメージジェネレータにより作成された実行ファイル)が利用できる場合、ネイティブバイナリをロードし、実行することは可能である。事前コンパイルされた実行ファイルが利用できない場合、JTI又はオンザフライコンパイラ110は、メモリ中で、マネージドアセンブリ108を再使用できないネイティブバイナリ114に変換する。周知のシステムにおいて、プログラムそれ自身がネイティブバイナリの様式に事前コンパイルされたとしても、ランタイムでプログラムにより生成されるコードは、プログラムが実行されるときはいつでも、再コンパイルされなければならない。追加のプログラムコードを生成するレフレクションエミットのような機能は呼び出される(例を挙げると、レフレクションエミットは、アセンブリのメタデータに記録された追加の情報を使用して、ランタイム中に生成した中間バイトコード111のような中間バイトコードを生成させる。)。ランタイム中に生成した中間バイトコード111が生成し、JIT又はオンザフライコンパイラは、ランタイムで生成した中間バイトコードを再使用できない実行可能なネイティブバイナリ114(マシンコード)に変換する。
対照的に、本明細書で開示された主題の態様に関して、ランタイム時に生成したコードを、ある状況においては、キャッシュすることができる(例として、中間バイトコードのキャッシュ109および/又は再利用可能な(マシンコード)実行ファイルのキャッシュ122において)。例えば、プログラムは、ランタイム時において追加コードを生成させる純粋の関数を含んでいると仮定する。純粋の関数は、本明細書では、グローバルステートを混乱させない関数のことを言う。関数Aは2つの変数、変数aと変数bとをとると仮定する。変数a=値1とともに関数Aが呼び出され、また変数b=値2についても同様である。それゆえ、その変数の特別な値のメソッド又はそのメソッドの変数(実行に特有の特性)生成し、生成した中間コードのキャッシュするランタイムコードのための特別な個性を生成することにより、その関数の次の呼び出しにおける中間言語の生成を省略できる。
それゆえ、最初にその関数は実行されるときに、中間言語を生成し、識別しキャッシュすることができる。2回目に、変数aの値1と変数2の値2を使用することによりその関数は実行されるときに、中間コードはそれがキャッシュされていることにより、生成する必要がなくなる。中間コードは関数名により確認され、代わりに識別子に適合した変数値はキャッシュメモリから取り出される。さらに、ネイティブコードが中間コードから生成される場合(例として、NGENのようなバイナリネイティブイメージジェネレータを通して)マシンコードはマシンコードキャッシュから取り出され、中間コードの生成の必要および中間バイトコードからネイティブマシンコードの生成の必要性は除かれる。
よくある状況はテストされる可能性があり、一般に生成した中間バイトコードが生成し、そして/又はネイティブバイナリが生成し、事前にキャッシュすることができる。本明細書において開示された主題のいくつかの態様に関連して、中間バイトコードおよび/又はネイティブバイナリイメージがアセンブリにおける追加のメタデータとして含まれるため、最初にアセンブリがユーザーのマシンにおいて実行され、マシンすべてにわたる中間バイトコードのキャッシュおよび/又はネイティブバイナリのマシンコードのキャッシュが空であるときにおいても、アセンブリ自体の中に中間バイトコードおよび/又はネイティブバイナリを見つけることができる。本明細書において開示された主題のいくつかの態様に関連して、動的なコードが生成した関数で更新されたアセンブリは、アセンブリが破棄されるか又は未使用となる可能性があるため新しいバージョン番号および/又は以前のキャッシュの(更新されていないものかオリジナルの)情報を受け取る可能性がある。
図2aは、当技術分野では周知のとおりランタイムで生成したコードのための方法を示している。202において動的プログラム(ランタイムで生成したコードを生成するプログラム)を包含しているソースコードは、図1に関して上に表記したようなコンパイラによりコンパイルされる。コンパイラの出力は、中間バイトコード及び中間バイトコードの生成と関連付けられたメタデータを包含しているアセンブリとなる。204において、アセンブリ実行の要求を受け取ることができる。206において、アセンブリをメモリにロードすることができる。208において、識別子のキーに基づく検索は、事前コンパイルされたネイティブバイナリの実行ファイルが利用できるか決定する。210において、ルックアップの処理はネイティブバイナリの実行ファイルが利用可能であり、ロードできネイティブバイナリの実行ファイルが実行できることを決定できる。208においてルックアップは事前コンパイルされたネイティブバイナリの実行ファイルが利用できないことを決定できる。
この決定に応答して、212ではJIT又はオンザフライコンパイラは中間バイトコードをネイティブバイナリにコンパイル又は変換し、そのバイナリをロードし実行する。214においては、事前コンパイルされようとJITコンパイルされようと、動的プログラムは実行する。216において、動的プログラムは、リフレクションエミットのような機能を呼び出すことにより実行されるため、追加のプログラムを生成する。このランタイムにおいて生成したコードは中間バイトコードとしてレフレクションエミットを呼び出すことにより生成する。そのランタイムで生成したコードが実行される前に、JIT又はオンザフライコンパイラによりネイティブバイナリコードにコンパイルされなければならない。ランタイムで生成するコードの事前コンパイルは不可能であり、ランタイムで生成したコードについてのネイティブバイナリの実行ファイルを作成することはできない。
図2bは、この明細書に開示された主題の態様に関連する、ランタイム生成コードをキャッシュする方法の一例である。302において、動的プログラム又は動的メソッド又は関数のようなプログラムの一部のようなプログラムエンティティの生成の要求が受け取られる。その結果をキャッシュするのに適しているメソッドや関数は、グローバルステートを混乱させないものである。突然にグローバルステートを変更しないメソッドや関数は「純粋」(又は「純粋」関数)と呼ばれている。本明細書に開示された主題の態様に関して、そのようなメソッドや関数に対するインジケータは特別な性質である。304において、識別子は特定のアルゴリズムやスキーマにより計算され生成する。
例えば、関数Aが2つの変数、変数aおよび変数bを取ると仮定する。関数Aが変数a=値1および変数b=値2にともなって呼び出されたときに、変数a≠値1および変数b≠値2で呼び出されたときに生成した中間コードと異なる中間コードが生成される。2番目に関数Aが変数a=値1および変数b=値2で呼び出されたときに生成した中間コードは、関数Aが呼び出しの間に変化しなければ最初に関数Aが変数a=値1および変数b=値2で呼び出されたときと同じである。古いキャッシュが使えず自動的にフラッシュすることを確実にするために、ランタイムコードが生成した関数Aの特定の性質が関数Aの名前(例えば、“[Namespace::]ObjectName::A”)を生成し、特定の変数値(値1又は値2)に加えて関数Aを有するアセンブリのストロング名(strong name)を含んでいる。これは、この識別子におけるこの特定の変数値の使用は間違った中間コードの使用を防止し、関数Aを有するアセンブリのストロング名の使用はアセンブリの間違ったバージョンの中間コードが使われないことを確実にするために用いられる(例えば、アセンブリ1は故意に旧関数Aを呼び出すこととなり、アセンブリ2は故意に更新した関数Aを呼び出すこととなる)。
306で、中間バイトコードのキャッシュのようなキャッシュは識別されたプログラムエンティティについて検査される。308で、計算された識別子が最初のキャッシュ(例えば、中間バイトコードのキャッシュ)において発見された場合、2番目のキャッシュは330において詳しく調べられる。2番目のキャッシュはネイティブバイナリコードのキャッシュである。332で、識別されたプログラムが2番目のキャッシュにおいて発見された場合、ネイティブコードは、それが中間バイトコードキャッシュのプログラムと同じバージョンかどうかを決定するために中間バイトコードキャッシュのルックアップの結果に対して検証され、346において、コードが最新であれば(例えば344で識別されたプログラムのエンティティのための中間バイトコードと同じバージョン)、ネイティブコードのバイナリはロードされ実行される。332で、識別されたプログラムエンティティが2番目の(ネイティブコードの)キャッシュ内で検出されなかった場合、334でネイティブコードは(JITコンパイラ又はオンザフライコンパイラ、又は後のキャッシュのためのNGENが実行されることによって)生成し、336においてロードされ実行され、NGENが実行されれば、338でキャッシュされる。
308で、中間バイトコードのプログラムが最初のキャッシュにおいて発見されない場合、340で中間コードが生成し(例えば、リフレクションエミットの起動により)、342でキャッシュに格納される。340での中間コード生成の後、2番目のキャッシュは330においてプログラムエンティティについて調べられる。2番目のキャッシュはネイティブバイナリコードのキャッシュとなる。332で識別されたプログラムエンティティが2番目のキャッシュにおいて発見された場合、ネイティブコードは344又は346の中間コードのキャッシュと同じバージョンかどうかの決定するための中間バイトコードのキャッシュのルックアップの結果に対して検証され、ネイティブコードが最新である場合(たとえば、識別されたプログラムエンティティのための中間バイトコードと同じバージョンに)、ネイティブコードのバイナリはロードされ実行される。332で、識別されたプログラムエンティティが2番目の(ネイティブコードの)キャッシュにおいて発見されない場合、ネイティブコードは(JITコンパイラ又はオンザフライコンパイラ又は後のキャッシュの格納のためにNGENが実行されることにより)334で生成し、336でロードされ実行され、NGENが実行されれば338でキャッシュされる。ネイティブバイナリコードのキャッシュはアセンブリ自体の中に存在するか、又はマシン全体にわたるキャッシュとなることができることが理解できるであろう。同様に、最初のキャッシュが中間バイトコードのキャッシュ又はソースアセンブリのキャッシュであろうことが理解できる。
本明細書に開示する主題の他の態様に関連して図2cを参照すると、306において、ネイティブバイナリコードのキャッシュのような最初のキャッシュは、識別されたプログラムエンティティについて検査される。308で、計算された識別子が最初のキャッシュ(例えば、ネイティブ2進コードのキャッシュメモリ)において検出された場合、324でネイティブバイナリコードのキャッシュから取り出され、ロードされ実行される。計算された識別子が最初のキャッシュ(例えば、ネイティブバイナリコードのキャッシュ)において検出されない場合、310で識別されたエンティティについてのルックアップを2番目のキャッシュ(例えば、中間バイトコードのキャッシュ)において行うことができる。312で、識別されたエンティティの中間コードが中間バイトコードのキャッシュにおいて発見された場合、中間バイトコードを読み出すことができ、314でネイティブコードに変換/コンパイルすることができる。任意にネイティブコードはキャッシュに格納することができる。316でネイティブコードをロードし、実行することができる。識別されたエンティティについての中間バイトコードが中間バイトコードのキャッシュから発見されない場合、中間バイトコードは(例えば、リフレクションエミットの起動により)生成することができ、318で生成した中間バイトコードを、320でキャッシュし、322でロードし実行することができる。ネイティブバイナリコードのキャッシュはアセンブリ自体の中に存在させる、又はマシン全体に渡るキャッシュとすることができることを認識されたい。同様に、最初のキャッシュが中間バイトコードのキャッシュ又はソースアセンブリのキャッシュとなり、逆もまた同様であると認識されたい。
適切なコンピューティング環境の例
本明細書で開示された主題の様々な態様の状況を提供するために、図3とそれに続く詳解は様々な実施例が実行に移されるだろう適切なコンピューティング環境510の短い全体的な説明を提供することが意図される。本明細書に開示された主題は、プログラムモジュールのようなコンピュータの実行の命令の全体的な状況において説明され、一以上のコンピュータ又は他のコンピューティングデバイスによって実行されるが、当業者は本明細書に開示された主題の一部が他のプログラムモジュールとの組み合わせおよび/又はハードウェアとソフトウェアとの組み合わせにおいても実現することができることが認識できるであろう。一般的にプログラムモジュールは、特有なタスクを行ったり特有なデータタイプを実現したりする、ルーチン、プログラム、オブジェクト、物理的な中間性生物、データ構造などを含む。典型的には、プログラムモジュールの機能性は様々な実施例の要求に結合し又は分配される。コンピューティング環境510は適切な操作環境の一例に過ぎず、本明細書に開示された主題の使用又は機能の範囲に限定されることを意図するものではない。
図3を引用して、コンピュータ512の形態の汎用コンピューティングデバイスが説明される。コンピュータ512は処理ユニット514、システムメモリ516、システムバス518を含んでいる。処理ユニット514は様々な処理に利用できる。デュアルマイクロプロセッサや他のマルチプロセッサのアーキテクチャもまた処理ユニット514として使用できる。システムメモリ516は揮発性メモリ520と不揮発性メモリ522を含んでいる。不揮発性メモリ522はROM(Read only memory)、PROM(programable ROM)、EPROM(electrically programable ROM)、又はフラッシュメモリを含んでいる。不揮発性メモリ520は外部のキャッシュメモリとして作動するRAM(random access memory)を含んでいる。システムバス518はシステムメモリ516を含むシステムの物理要素を処理ユニット514に結合させる。システムバス518はメモリバス、メモリコントローラ、周辺機器バス、外部バス又はローカルバス等を含むいくつかのタイプとすることができ、多様な使用可能なバスアーキテクチャの使用ができる。
コンピュータ512は通常の揮発性又は不揮発性の媒体、取り外し可能又は不可能なメディアのようなコンピュータ可読のさまざまなメディアを含んでいる。コンピュータ記録媒体はコンピュータ可読の命令、データ構造、プログラムモジュールおよび他のデータのような情報の記録のためのどの方法又は技術によっても実現できる。コンピュータ記録媒体は、RAM、ROM、EPROM、フラッシュメモリその他のメモリ技術、CDROM、DVD(digital versatile disks)や他の光ディスク記録、時期カセット、磁気テープ、磁気ディスク又は他の磁気記録装置、又は他の目的とする情報の記録に使用でき、コンピュータ512にアクセスできる媒体を含むが、それに限定されない。
図3がユーザーとコンピュータリソースとの間で作動することのできるソフトウェアを説明していることは認識できるであろう。このソフトウェアはディスクストレージ524に記録することができ、コンピュータ512のリソースを管理し配置することのできる操作システム528を含んでいる。ディスクストレージ524はインターフェース526のような取り外し不可能なメモリのインターフェースを通してシステムバス518と接続されたハードディスクドライブとなる。システムアプリケーション530は、システムメモリ516又はディスクストレージ524双方に記録されたプログラムモジュール532およびプログラムデータ534を通してオペレーティングシステム528による資源の管理の利益を享受できる。コンピュータはさまざまなオペレーティングシステムの組み合わせにより実現できることが認識できるであろう。
ユーザーはインプットデバイス536を通してコマンドや情報をコンピュータ512に入力できる。インプットデバイス536は、マウス、トラックボール、タッチペン、タッチパッド、キーボード、マイクロホンおよび同類のもののようなポインティングデバイスが含まれるがそれに限定されない。これらおよび他のインプットデバイスは処理ユニット514とシステムバス518を通してインターフェースポート538を用いて接続する。アウトプットアダプター542はアウトプットデバイス540とシステムバス518の間の接続を提供するビデオカードやサウンドカードを含むがそれに限定されない。他のデバイスおよび/又はリモートコンピュータ544のようなシステム又はデバイスはインプットおよびアウトプットの機能を提供するであろう。
コンピュータ512はネットワーク環境において、リモートコンピュータ544のような1以上のリモートコンピュータとの理論接続を使用して動作できる。リモートコンピュータ544はパーソナルコンピュータ、サーバー、ルーター、ネットワークPC、ピアデバイス又は他の一般的なネットワークノードとすることができ、上述のコンピュータ512と関係する多くの又はすべての要素を一般的に含むが、図3にはメモリストレージ546のみが記されている。リモートコンピュータ544は通信接続550を介して理論的に接続することができる。ネットワークインターフェース548はLANやWANのような通信ネットワークを含んでいるが、また、他のネットワークも含む可能性がある。通信接続550はネットワークインターフェース548とシステムバス518の接続に使用するハードウェア/ソフトウェアのことを言う。接続550はコンピュータ512の内部又は外部にでき、モデム(電話、ケーブル、DSLおよび無線)やISDNアダプター、イーサーネットカード等の内部および外部の技術を含んでいる。
示されたネットワークの接続はほんの一例であり、コンピュータ間の通信リンクの構成の他の方法が使用できることは認識できるであろう。当業者は、コンピュータ512や他のクライアントデバイスをコンピュータネットワークの一部として配置することができることが認識できる。これに関して、本明細書に開示された主題は多くのメモリやストレージユニットを有するコンピュータシステム、又は多くのストレージユニット又はボリュームに生成したアプリケーションやプロセスに関係するであろう。本明細書に開示された主題の態様はネットワーク環境において敷かれたサーバーコンピュータとクライアントコンピュータを有する環境に適用するであろう。本明細書に開示された主題の態様は、また、プログラミング言語の機能、つまり通訳又は実行機能を有している、単独型コンピューティングデバイスに適用するであろう。
図4は、統合開発環境(IDE)600および共通言語ランタイム環境602を示している。IDE600はユーザー(例えば、ディベロッパー、プログラマー、デザイナー)に、コンピュータシステムにおける設計、コード化、コンパイル、テスト、ラン、編集、プログラムのデバッグおよびビルド、プログラム、ウエブサイト、ウエブアプリケーションおよび他のウエブサービスのセッティングを許可する。ソフトウェアのプログラムはソースコード(コンポーネント610)を含むが、そのソースコードは一以上のソースコード言語(例えば、Visual Basic、Visual J#、C++、C#、Java Script、APL、COBOL、Pascal、Eiffel、Haskell、ML、Oberon、Perl、Python、Scheme、Smalltalk等)をにおいて作成される。IDE600はネイティブコードの開発環境を提供するか、バーチャルマシン上で実行するマネージドコードの開発を提供するか、又はその組み合わせを提供する。IDE600は.NETフレームワークで使用するマネージドコード開発環境を提供する。中間言語コンポーネント650は言語特有のソースコンパイラ620を使用してソースコードコンポーネント610とネイティブコードコンポーネント611から作成され、ネイティブコードコンポーネント611(例えば、マシンの実行可能命令)は中間言語コンパイラ660(例えば、JITコンパイラ)を使用して、アプリケーションが実行されるときに中間言語コンポーネント650から作成される。すなわち、中間言語アプリケーションが実行されたとき、中間言語アプリケーションは、それが実行されているプラットホームのための適切なマシン言語が実行されているときにコンパイルされ、それによっていくつかのプラットホーム中に移植できるコードを作ることができる。あるいは、他の実施例において、プログラムはそれが意図するプラットホームにふさわしいネイティブコードのマシン言語(表示していない)にコンパイルされる。
ユーザーは、IDE600の中のユーザーインターフェース640とソースコードエディタ651を介して特別なソース言語と結びついたソフトウェアプログラミングの技術および特別な理論上および構文上の法則を知ることにより、ソースコードコンポーネントを作成および/又は編集できる。その後、ソースコンパイラ620を介してソースコードコンポーネント610をコンパイルすることができ、それにしたがって、プログラムの中間言語表現は、アセンブリ630のように創造される。アセンブリ630は中間言語コンポーネント650とメタデータ642を含んでいる。アプリケーションの設計は開発前に有効にできるであろう。
本明細書において説明された様々な技術はソフトウェア又はハードウェアとの結合により、また必要な場合には双方の結合により、実現されるであろう。それゆえ、本明細書において説明された方法および機器又はある実施例又はそれに関する一部は、フロッピーディスク、CD−ROM、ハードデバイス、又は他のマシンで読み取り可能な記録媒体のような実際の媒体において具体化されたプログラムコードの形式(すなわち命令)をとり、そこで、プログラムのコードがコンピュータのようなマシンに読み込まれ、実行されたとき、そのマシンは、本明細書において開示された主題の態様を実現する装置となる。プログラム制御可能なコンピュータでのプログラムコードの実行について言えば、コンピューティングデバイスは概してプロセッサ、プロセッサで読み取り可能な記録媒体(揮発性および不揮発性のメモリ、および/又は記録要素を含んでいる)、少なくともひとつのインプットデバイス、そして少なくともひとつのアウトプットデバイスを含んでいる。一以上のプログラムは領域特化型のプログラムモデルの態様の創造又は実現を利用できる。たとえば、1以上のプログラムは、データ処理用のAPI又は同種のものの使用を通して、高水準のプログラミング言語又はオブジェクト指向のプログラミング言語において実装され、コンピュータシステムを用いて通信する。しかしながら、そのプログラムは、必要に応じてアセンブリ又はマシン言語中でコンパイルされるであろう。どんな場合でも、その言語はコンパイル又は変換され、ハードウェアの実現と結びつくであろう。
本明細書に開示された主題が図との関係で説明される一方で、変更されたものであっても、異なる方法で同様の機能を実行できるであろう。

Claims (15)

  1. ランタイムで生成したコードをキャッシュするシステム(100)であって、
    コンピュータのマネージドコード環境で実行中のコンポーネント(120)を備え、前記コンポーネントはエンティティ(116,111)を第1のキャッシュ(109、118)または第2のキャッシュ(109、118)にキャッシュするものであり、前記キャッシュされたエンティティ(116、111)はランタイムで生成したコードを含み、前記ランタイムで生成したコードはランタイムにおいて動的コードが生成したエンティティにより生成させられたものであり、前記動的コードが生成したエンティティはグローバルステートを混乱させず、前記キャッシュされたエンティティ(116、111)は当該キャッシュされたエンティティ(116、111)の次の実行において、少なくとも1のコード生成の段階を回避することにより、前記第1のキャッシュ(108、109)または前記第2のキャッシュ(109、108)から取り出され、前記回避された少なくとも1のコード生成の段階は中間バイトコードの生成またはネイティブバイナリコードの生成を含むことを特徴とするシステム。
  2. 前記第1のキャッシュはランタイムで生成したコードを表している中間バイトコードを記録するキャッシュを含み、前記回避された少なくとも1のコード生成の段階は前記ランタイムで生成したコードについての中間バイトコードを生成すること含むことを特徴とする請求項1に記載のシステム。
  3. 前記第2のキャッシュはネイティブバイナリコードを記録するキャッシュを含み、前記回避された少なくとも1のコード生成の段階は前記ランタイムで生成したコードのネイティブバイナリコードを生成すること含むことを特徴とする請求項1に記載のシステム。
  4. 前記第1のキャッシュはソースアセンブリのキャッシュであり、前記回避された少なくとも1のコード生成の段階は前記ランタイムで生成したコードの中間バイトコードの生成又は前期ランタイムで生成したコードのネイティブバイナリコードの生成を含むことを特徴とする請求項1に記載のシステム。
  5. 前記ランタイムで生成したコードの前記中間バイトコードは前記動的コードを生成させるエンティティと関連付けられた名前と、前記動的コードを生成させるエンティティへ渡される少なくとも1の変数と、前記動的コードを生成させるエンティティの1のバージョンのインジケータとを含むにより検索されることを特徴とする請求項1に記載のシステム。
  6. ランタイムで生成したコードをキャッシュする方法であって、
    純粋関数のランタイムでコードを生成させるエンティティにより生成したランタイム生成コードを含むエンティティの識別子を計算すること(304)であって、前記ランタイムでコードを生成させるエンティティはリフレクションエミットの機構により生成された中間バイトコードを含み、前記計算された識別子は前記ランタイムで生成したコードの実行コンテクストに特有の特性を備えることと、
    前記エンティティの最初の実行において前記計算された識別子がキーとなっている前記エンティティを第1のキャッシュに記録すること(320)と、
    前記記録されたエンティティの2番目の実行に応えて前記記録されたエンティティを戻すこと(322)であって、前記記録されたエンティティの前記中間バイトコードの生成は当該記録されたエンティティの前記2番目の実行について回避することと、
    を含むこと特徴とする方法。
  7. 前記記録されたエンティティについての前記中間バイトコードから前記ランタイムで生成したコードのネイティブバイナリコードを生成することをさらに備えることを特徴とする請求項6に記載の方法。
  8. 前記生成したネイティブバイナリコードを第2のキャッシュであるネイティブバイナリコードのキャッシュにキャッシュすることをさらに備えることを特徴とする請求項7に記載の方法。
  9. 前記第1のキャッシュ又は前記第2のキャッシュは記録されたエンティティを含むソースアセンブリであることを特徴とする請求項6に記載の方法。
  10. 前記計算された識別子は、前記純粋関数のランタイムでコードを生成するエンティティと関連付られた名前と、前記純粋関数のランタイムでコードを生成させるエンティティに渡される少なくとも1つの変数と、前記純粋関数のランタイムでコードを生成するエンティティの1つのバージョンのインジケータとを含む識別子とを含むことを特徴とする請求項6に記載の方法。
  11. コンピュータ可読の記録媒体であって、
    実行時にマネージドコンピューティング環境に第1のキャッシュ又は第2のキャッシュにエンティティをキャッシュさせるコンピュータ実行可能命令を有し、前記エンティティはグローバルステートを混乱させないランタイムでコードを生成するエンティティにより生成されたランタイムで発生されたコードを含み、前記キャッシュされたエンティティは前記2番目の実行において少なくとも1のコード生成の段階を回避することにより前記エンティティの2番目の実行において取り出される、
    ことを特徴とするコンピュータ可読の記録媒体。
  12. 実行時に前記マネージドコンピューティング環境に、前記キャッシュされたエンティティの前記第2の実行のための前記ランタイムで生成したコードの中間バイトコードの生成を回避させるコンピュータ実行可能命令をさらに有することを特徴とする請求項11に記載のコンピュータ可読の記録媒体。
  13. 実行時に前記マネージドコンピューティング環境に、前記キャッシュされたエンティティの前記2番目の実行のための前記ランタイムで生成したコードの中間バイトコードから生成したネイティブバイナリコードの生成を回避させるコンピュータ実行可能命令をさらに有することを特徴とする請求項11に記載のコンピュータ可読の記録媒体。
  14. 実行時に前記マネージドコンピューティング環境に、前記キャッシュされたエンティティのソースアセンブリに前記ネイティブバイナリコードまたは中間バイトコードをキャッシュさせるコンピュータ実行可能命令をさらに有することを特徴とする請求項13に記載のコンピュータ可読の記録媒体。
  15. 実行時に前記マネージドコンピューティング環境に、
    前記キャッシュされたエンティティの実行に特有の性質を用いて前記エンティティに特別な識別子を提供し、
    前記第1のキャッシュまたは前記2番目のキャッシュから、前記特別な識別子がキーになっている前記キャッシュされたエンティティを取り出させる、
    コンピュータ実行可能命令をさらに有する請求項13に記載のコンピュータ可読の記録媒体。
JP2011532141A 2008-10-15 2009-09-30 ランタイムにおいて生成したコードのキャッシュへの格納 Active JP5518085B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/251,497 US9250938B2 (en) 2008-10-15 2008-10-15 Caching runtime generated code
US12/251,497 2008-10-15
PCT/US2009/059125 WO2010045027A2 (en) 2008-10-15 2009-09-30 Caching runtime generated code

Publications (3)

Publication Number Publication Date
JP2012506094A true JP2012506094A (ja) 2012-03-08
JP2012506094A5 JP2012506094A5 (ja) 2012-11-08
JP5518085B2 JP5518085B2 (ja) 2014-06-11

Family

ID=42100058

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011532141A Active JP5518085B2 (ja) 2008-10-15 2009-09-30 ランタイムにおいて生成したコードのキャッシュへの格納

Country Status (7)

Country Link
US (1) US9250938B2 (ja)
EP (1) EP2340481B1 (ja)
JP (1) JP5518085B2 (ja)
CN (1) CN102187313B (ja)
BR (1) BRPI0919132A2 (ja)
RU (1) RU2520344C2 (ja)
WO (1) WO2010045027A2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101559651B1 (ko) 2014-01-28 2015-10-13 한양대학교 산학협력단 동적 분석 방법 및 장치
JP2016197399A (ja) * 2015-03-31 2016-11-24 エーオー カスペルスキー ラボAO Kaspersky Lab オペレーティング・システム・リソースに対する機械語のネイティブイメージのアクセス制御のシステム及び方法
JP2017507411A (ja) * 2014-01-23 2017-03-16 クアルコム,インコーポレイテッド 動的言語でのインラインキャッシュのためのハードウェアアクセラレーション

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8578056B1 (en) * 2008-03-31 2013-11-05 Symantec Corporation Optimized application streaming for just in time compiled components
US20100306751A1 (en) * 2009-05-28 2010-12-02 James Paul Schneider Execution result caching and searching
US8677329B2 (en) * 2009-06-03 2014-03-18 Apple Inc. Methods and apparatuses for a compiler server
US9117071B2 (en) 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
US9104484B2 (en) * 2010-04-21 2015-08-11 Salesforce.Com, Inc. Methods and systems for evaluating bytecode in an on-demand service environment including translation of apex to bytecode
US8924922B2 (en) * 2010-06-14 2014-12-30 Microsoft Corporation Pre-compiling hosted managed code
US9152437B2 (en) * 2010-10-28 2015-10-06 Hewlett-Packard Development Company, L.P. Dynamically installing image processing
US20120110558A1 (en) * 2010-10-29 2012-05-03 Microsoft Corporation Customized binaries on-the-fly
US9584877B2 (en) * 2011-06-16 2017-02-28 Microsoft Technology Licensing, Llc Light-weight validation of native images
US9552201B2 (en) * 2011-08-31 2017-01-24 Avaya Inc. System and method for incremental software installation
US8972952B2 (en) 2012-02-03 2015-03-03 Apple Inc. Tracer based runtime optimization for dynamic programming languages
US9223599B1 (en) * 2012-03-30 2015-12-29 Zynga Inc. Client-side server for client-side scripting languages
US9104449B2 (en) * 2012-06-18 2015-08-11 Google Inc. Optimized execution of dynamic languages
US9116713B1 (en) * 2013-03-12 2015-08-25 Emc Corporation System and method for expression evaluation in a distributed networking environment
CN103412754A (zh) * 2013-08-15 2013-11-27 优视科技有限公司 动态语言代码执行方法和装置
US9292270B2 (en) 2014-03-27 2016-03-22 Microsoft Technology Licensing, Llc Supporting dynamic behavior in statically compiled programs
US9389890B2 (en) 2014-03-27 2016-07-12 Microsoft Technology Licensing, Llc Hierarchical directives-based management of runtime behaviors
JP6379654B2 (ja) * 2014-05-15 2018-08-29 富士通株式会社 処理実行プログラム、処理実行方法、及び情報処理装置
US9952843B2 (en) * 2014-05-15 2018-04-24 Nvidia Corporation Partial program specialization at runtime
US10025571B1 (en) 2014-07-17 2018-07-17 Google Llc Optimized execution of dynamic languages
CN105786465A (zh) * 2014-12-23 2016-07-20 远光软件股份有限公司 一种脚本语言执行方法及装置
RU2628920C2 (ru) * 2015-03-31 2017-08-22 Закрытое акционерное общество "Лаборатория Касперского" Способ обнаружения вредоносных сборок
FR3038087B1 (fr) * 2015-06-29 2018-08-10 Commissariat A L'energie Atomique Et Aux Energies Alternatives Procede d'execution d'un programme d'ordinateur comportant une fonction parametree
FR3038086B1 (fr) * 2015-06-29 2018-08-10 Commissariat A L'energie Atomique Et Aux Energies Alternatives Procede d'execution d'un programme d'ordinateur comportant une fonction parametree
US9367686B1 (en) * 2015-07-21 2016-06-14 AO Kaspersky Lab System and method for antivirus checking of native images of software assemblies
US20170083298A1 (en) * 2015-09-23 2017-03-23 Microsoft Technology Licensing, Llc Resilient format for distribution of ahead-of-time compiled code components
US10303498B2 (en) * 2015-10-01 2019-05-28 Microsoft Technology Licensing, Llc Performance optimizations for emulators
US9910646B2 (en) * 2015-12-26 2018-03-06 Intel Corporation Technologies for native code invocation using binary analysis
US10459727B2 (en) * 2015-12-31 2019-10-29 Microsoft Technology Licensing, Llc Loop code processor optimizations
CN105893031B (zh) * 2016-03-28 2019-12-24 广州华多网络科技有限公司 一种缓存操作实现方法、业务层方法的调用方法及装置
US10521208B2 (en) * 2017-06-23 2019-12-31 Microsoft Technology Licensing, Llc. Differentiated static analysis for dynamic code optimization
EP3428746B1 (en) * 2017-07-14 2021-06-02 Siemens Aktiengesellschaft A method and apparatus for providing an adaptive self-learning control program for deployment on a target field device
CN112183712A (zh) * 2019-07-03 2021-01-05 安徽寒武纪信息科技有限公司 深度学习算法的编译方法、装置及相关产品
US11150915B2 (en) 2019-09-13 2021-10-19 International Business Machines Corporation Deferred bytecode class verification in managed runtime environments
US11403075B2 (en) 2019-11-25 2022-08-02 International Business Machines Corporation Bytecode verification using class relationship caching
US11403100B2 (en) 2020-08-31 2022-08-02 Microsoft Technology Licensing, Llc Dual architecture function pointers having consistent reference addresses
US11231918B1 (en) 2020-08-31 2022-01-25 Microsoft Technologly Licensing, LLC Native emulation compatible application binary interface for supporting emulation of foreign code
US11042422B1 (en) 2020-08-31 2021-06-22 Microsoft Technology Licensing, Llc Hybrid binaries supporting code stream folding
CN112596770B (zh) * 2020-12-24 2023-08-18 潍柴动力股份有限公司 一种数据处理方法、装置、电子设备和存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005250958A (ja) * 2004-03-05 2005-09-15 Ntt Data Corp 分散コンピューティング環境におけるサービス実行処理システム、およびそのクライアント装置ならびにプログラム、サービス実行処理方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
WO2002042915A2 (en) * 2000-11-22 2002-05-30 Zend Technologies Ltd. Method and apparatus for dynamic shared-memory caching of scripting engine product
CA2349905A1 (en) 2001-06-07 2002-12-07 Ibm Canada Limited-Ibm Canada Limitee System and method of mapping between software objects and structured language element based documents
JP3808755B2 (ja) 2001-11-07 2006-08-16 富士通株式会社 Jitコンパイラを備えた仮想計算機
EP1313012A1 (en) * 2001-11-15 2003-05-21 Texas Instruments France Java DSP acceleration by byte-code optimization
US6947955B2 (en) 2002-09-23 2005-09-20 International Business Machines Corporation Run-time augmentation of object code to facilitate object data caching in an application server
US20040123278A1 (en) 2002-12-23 2004-06-24 Murthi Nanja Persistent cache apparatus and methods
US20040186862A1 (en) 2003-03-18 2004-09-23 Garthwaite Alexander T. Parallel caching of insertions into remembered-sets
US7219329B2 (en) 2003-06-13 2007-05-15 Microsoft Corporation Systems and methods providing lightweight runtime code generation
CN100552650C (zh) 2004-04-30 2009-10-21 马维尔国际贸易有限公司 用于结合使用有效范围语句和动态缓存变量的方法
US7770159B2 (en) * 2004-10-20 2010-08-03 Microsoft Corporation Virtual types
KR100725393B1 (ko) 2005-05-19 2007-06-07 삼성전자주식회사 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법
US7650600B2 (en) 2005-06-20 2010-01-19 Microsoft Corporation Unique identifier resolution interfaces for lightweight runtime identity
US7730464B2 (en) 2005-09-14 2010-06-01 Microsoft Corporation Code compilation management service
US7506119B2 (en) 2006-05-04 2009-03-17 International Business Machines Corporation Complier assisted victim cache bypassing
US8321850B2 (en) * 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005250958A (ja) * 2004-03-05 2005-09-15 Ntt Data Corp 分散コンピューティング環境におけるサービス実行処理システム、およびそのクライアント装置ならびにプログラム、サービス実行処理方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017507411A (ja) * 2014-01-23 2017-03-16 クアルコム,インコーポレイテッド 動的言語でのインラインキャッシュのためのハードウェアアクセラレーション
KR101559651B1 (ko) 2014-01-28 2015-10-13 한양대학교 산학협력단 동적 분석 방법 및 장치
JP2016197399A (ja) * 2015-03-31 2016-11-24 エーオー カスペルスキー ラボAO Kaspersky Lab オペレーティング・システム・リソースに対する機械語のネイティブイメージのアクセス制御のシステム及び方法

Also Published As

Publication number Publication date
CN102187313A (zh) 2011-09-14
JP5518085B2 (ja) 2014-06-11
WO2010045027A2 (en) 2010-04-22
US20100095284A1 (en) 2010-04-15
EP2340481A4 (en) 2013-03-06
EP2340481A2 (en) 2011-07-06
US9250938B2 (en) 2016-02-02
RU2520344C2 (ru) 2014-06-20
EP2340481B1 (en) 2018-06-13
BRPI0919132A2 (pt) 2015-12-08
WO2010045027A3 (en) 2010-07-01
CN102187313B (zh) 2014-07-09
RU2011114807A (ru) 2012-10-20

Similar Documents

Publication Publication Date Title
JP5518085B2 (ja) ランタイムにおいて生成したコードのキャッシュへの格納
US7490320B2 (en) Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation
EP3314422B1 (en) Extending a virtual machine instruction set architecture
JP5415557B2 (ja) デバッギングのためのユーザ・スクリプト・コードの変換
US8707263B2 (en) Using a DSL for calling APIS to test software
US8612930B2 (en) Methods and apparatus for dynamic class reloading and versioning
US20160202961A1 (en) Specialization of Generic Methods
US20080005719A1 (en) Methods, systems, and computer program products for providing a program execution environment
US9417931B2 (en) Unified metadata for external components
US20080022265A1 (en) Methods, systems, and computer program products for generating and using object modules
US20140165035A1 (en) Expansion and reduction of source code for code refactoring
JP2005509194A (ja) プレインターナライズ済プログラムファイルの作成及び使用のための方法並びに装置
US20180373515A1 (en) Differentiated static analysis for dynamic code optimization
US20090320007A1 (en) Local metadata for external components
US20040083467A1 (en) System and method for executing intermediate code
US20070180433A1 (en) Method to enable accurate application packaging and deployment with optimized disk space usage
US10572275B2 (en) Compatible dictionary layout
US20080127156A1 (en) Method and system for runtime environment emulation
US10387142B2 (en) Using annotation processors defined by modules with annotation processors defined by non-module code
Krylov et al. Ahead-of-time compilation in OMR: overview and first steps
Thom et al. A survey of ahead-of-time technologies in dynamic language environments
US20050246677A1 (en) Native method invocation (NMI) custom marshalling stub service
US20170083298A1 (en) Resilient format for distribution of ahead-of-time compiled code components
Gregersen et al. Towards a Dynamic-update-enabled JVM
Meijer et al. Overcoming independent extensibility challenges

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120921

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120921

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130701

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130718

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130802

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131101

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140218

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140303

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140401

R150 Certificate of patent or registration of utility model

Ref document number: 5518085

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250