JP5602597B2 - 外来情報を区分けすることにより仮想マシン・コードをメモリ最適化する方法、コンピュータ・プログラム、およびシステム - Google Patents

外来情報を区分けすることにより仮想マシン・コードをメモリ最適化する方法、コンピュータ・プログラム、およびシステム Download PDF

Info

Publication number
JP5602597B2
JP5602597B2 JP2010262977A JP2010262977A JP5602597B2 JP 5602597 B2 JP5602597 B2 JP 5602597B2 JP 2010262977 A JP2010262977 A JP 2010262977A JP 2010262977 A JP2010262977 A JP 2010262977A JP 5602597 B2 JP5602597 B2 JP 5602597B2
Authority
JP
Japan
Prior art keywords
information
code
location
computer
foreign
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.)
Active
Application number
JP2010262977A
Other languages
English (en)
Other versions
JP2011118901A (ja
Inventor
カーチス・イー・フリスチュク
シーン・クリストファー・フォリー
ヘンリー・ウォルトン・アダムス3世
アンドリュー・ラッセル・ロー
ピーター・ダンカン・シップトン
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2011118901A publication Critical patent/JP2011118901A/ja
Application granted granted Critical
Publication of JP5602597B2 publication Critical patent/JP5602597B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、一般的には仮想マシン・コードに関し、詳しくいえば、外部からの情報(以下、外来情報という)を実行可能なコードから区分けすることによる仮想マシン・コードのメモリ最適化に関する。
仮想マシン技術の利点が広く認識されるようになった。これらの利点の中には、単一のホスト・プラットフォーム上で複数の仮想マシンを稼動させる機能がある。その機能は、各ユーザが「完全な」コンピュータの特徴を楽しむことを保証すると同時にハードウェアの潜在的可能性をより十分に活用するものである。コンピュータ・ソフトウェアの増大する複雑性と、日常生活およびビジネスにおけるソフトウェア・システムに関して高まる信頼性とによって、ソフトウェア実行における高いパフォーマンスがユーザによって期待されるようになった。仮想マシン・ソフトウェアのパフォーマンスは特に重要である。それは、このソフトウェアが、多くの場合、メモリ制約を受ける、例えば、従来のコンピュータ・システムよりも少ないメモリを持つ傾向のあるPDAやスマートフォンのようなワイヤレス装置であるシステム上で稼動されるためである。したがって、ネイティブ・ファンクション・コールを最小にしたり、ネイティブ・コードで提示される機能のタイプを制限したり、アプリケーション・サイズを縮小したり、効率的なコーディングを要求したりするような、ランタイム中の仮想マシン・コードによるメモリ使用量を減らす努力がなされてきた。メモリ使用量を減少させることは、依然として、最適なソフトウェア・パフォーマンスに対する重要な目標である。
従って、本発明の目的は、仮想マシン・コードまたはインタープリットされたコードを最適化するのための方法、コンピュータ・プログラム、およびシステムを提供することにある。
本発明の方法は、複数のプログラム命令と第1の外来情報とを含むコードを受け取るステップであって、そのコードが仮想マシンによる実行のための言語で書かれており、第1の外来情報が第1のタイプの非実行可能な情報である、ステップと、第1の外来情報を除去し、第1の外来情報のロケーションを参照するキーでもって第1の外来情報を置換することによってコードを修正するステップと、その修正されたコード (以下、修正コードという)を実行し、実行中に第1の外来情報を要求する事象が生じた場合、事象に応答して、キーを使ってロケーションにおける第1の外来情報を見つけ、ロケーションから第1の外来情報をロードするステップとを含む。
本発明の実施例に従って、仮想マシンを含む例示的なコンピュータ・システムを示すブロック図である。 本発明の第1実施例に従って、例示的な区分け(partioning)およびメモリ最適化プロセスを示すブロック図である。 本発明の第1実施例に従って、例示的なJavaクラス・ファイルに関する図2の区分けプロセスの効果を示すブロックである。 本発明の第1実施例に従って、区分けおよびメモリ最適化プロセスを示すフローチャートである。 本発明の第1実施例に従って、区分けおよびメモリ最適化プロセスを示すフローチャートである。 本発明の第2実施例に従って、例示的な区分けおよびメモリ最適化プロセスを示すフローチャートである。 本発明の第2実施例に従って、例示的なJavaクラス・ファイルに関する図5の区分けプロセスの影響を示すブロック図である。 本発明の第2実施例に従って、区分けおよびメモリ最適化プロセスを示すフローチャートである。 本発明の第2実施例に従って、区分けおよびメモリ最適化プロセスを示すフローチャートである。
図面を参照すると、本発明の実施例による例示的なコンピュータ・システムが図1に示される。図1は、システム・バス18によってコミュニケーション可能に連結された、プロセッサ12、メモリ14、ネットワーク・アダプタ16およびJava(登録商標)仮想マシン20を含むコンピュータ・システム10を示す。メモリ14は、任意の一般的なもしくはそれ以外のメモリまたは記憶装置(例えば、RAM、キャッシュ、フラッシュ等)によって具現化され得るし、任意の適当な記憶容量を含み得る。ネットワーク・アダプタ16は、コンピュータ・システム10が、共用メモリを介してまたは他の適当な態様で、任意の数の任意の適当な通信媒体(例えば、WAN、LAN、インターネット、イントラネット、有線、無線等)によって1つまたは複数の他のシステムと通信し得るように具現化され得る。本実施例のコンピュータ・システムは、任意の一般的なもしくはそれ以外のプロトコルによってネットワークまたは他の通信チャンネルを介して通信するように一般的なもしくはそれ以外の通信装置を含み得るし、アクセスのために任意のタイプの接続(例えば、有線、無線)を利用し得る。
Java仮想マシン20は、クラス・ローダ21、例外ハンドラ・モジュール22、エラー報告モジュール23、実行エンジン24、クラス・ライブラリ27、およびメモリ28のような種々のコンポーネントを含み、実行エンジン24は、インタープリタ25およびJust-in-Time(JIT)コンパイラ26を含む。仮想マシン20は、本明細書ではJava仮想マシンとして論じられるが、本発明がJava技術に限定されないこと、および他の技術、およびCPython仮想マシン、.NETand Common Language Runtime、Parrot仮想マシン、Rubinius仮想マシン、または任意の他の適当な仮想マシンのような仮想マシンに関連して具現化され得ることは当然である。
クラス・ローダ21はコード、例えば、Javaクラス(.class)もしくはJaveArchives(.jar)ファイル、またはCILバイトコード・ファイルのようなバイトコードをロードする。Sonoコードは、仮想マシンによる使用に適した任意の言語からコンパイルされたプログラム命令を含む。例えば、CPython仮想マシンによる使用に適した言語はPythonを含み、Java Virtual Machine(JVM)による使用に適した言語はJava、Clojure、Fan、Groovy、IBM(登録商標) NetRexx、JavaFXScript、JavaScript(登録商標)、JRuby、Jython、JScheme、Macromedia ColdFusion、Rhino、Scala等を含み、 .NET Common Language Runtime(CLR)による使用に適した言語はC#、C++/CLI、Cobra、F#、Fan、IronPython、IronRuby、J#、JScript.NET、ManagedJScript、Mondrian、Nemerle、VB.NET等を含み、Parrot仮想マシンによる使用に適した言語はPerl 6を含み、Rubinius仮想マシンによる使用に適した言語はRubyを含む。言語はインタープリットされた言語またはコンパイルされた言語であってもよく、例えば、JVMによる使用のための言語は普通にインタープリットされたJavaScriptまたは普通にコンパイルされたGroovyであってもよい。
コンピュータ・システム10は、処理システムの形でまたはソフトウェアの形で具現化され得る。コンピュータ・システム10は、任意の通常もしくは別のコンピュータ・システムまたは装置(例えば、コンピュータ端末、パーソナル・コンピュータ(例えば、IBM互換性のもの、Apple(登録商標) Macintosh(登録商標)、タブレット、ラップトップ等)等)、携帯電話、携帯情報端末(例えば、Palm Pre(登録商標)、Treo(登録商標)、iPhone(登録商標)等によって具現化され得るし、任意の市販のオペレーティング・システム(例えば、AIX(登録商標)、Linux(登録商標)、OSX(登録商標)、Sun(登録商標) Solaris(登録商標)、Unix(登録商標)、Windows(登録商標)等)および任意の市販のカスタム・ソフトウェア(例えば、ブラウザ・ソフトウェア、通信ソフト、ワード処理ソフトウェア等)を含み得る。これらのシステムは、情報を入力および/または表示するためのディスプレイおよび入力装置(例えば、キーボード、マウス、音声認識装置等)を含み得る。コンピュータ・システム10は、それをソフトウェアで(例えば、仮想イメージとして)具現化する場合、記録可能な媒体(例えば、磁気的媒体、光学的媒体、フロッピ、DVD、CD等)において、またはソースから通信媒体(例えば、電子掲示板、ネットワーク、LAN、WAN、イントラネット、インターネット等)を介してダウンロードするための搬送波または信号の形で利用可能である。
図2〜図5は、本発明の第1実施例の種々の態様を示す。この実施例では、コードは、実行可能なコードが正規のものとしてロードされるよう、および、必要なときだけ、外来情報がレージ・ロード(lazy-load)されるよう、実行可能なコードから外来情報を分離することおよび外来情報を個別に格納することによって区分けされる。この方法は、デバッグするためのプロセスおよびフィールドにおけるコードをサービスするために必要な他のプロセスのための外来情報のアクセシビリティを維持しながらメモリ・フットプリントを減少させることによってメモリ使用量を最適化する。
図2は、本発明の第1実施例に従って図1のシステムが遂行し得る例示的なパーティショニングおよびメモリ最適化プロセスを示す。このプロセスでは、Javaクラス・ファイルまたはCILコード・ファイルのようなコード30が、そのコード30における外来情報を識別するポスト・コンパイル・モジュール40によって受け取られる。外来情報は非実行可能な情報、例えば、デバッグ情報221、注釈情報222、またはソース情報223である。コード30は、修正コード35を生じるために外来情報を削除することおよびその外来情報をデータベース60、共用クラス・キャッシュのようなデータ記憶ロケーションに、またはネスト・インナー・クラスとしてもしくは個別のバイナリ・オブジェクトとして、格納することによって修正される。格納ロケーションを識別する一意的な識別キーが修正コード35に挿入される。
ランタイムでは、修正コード35が、正規のものとして、仮想マシン20にロードされる。ランタイム中に外来情報に対する要求が存在する場合、システムは、特定のタスクに対して要求された適切なタイプの外来情報だけを見つけてロードし得る。例えば、障害が生じた場合、例外処理プロセス22およびエラー報告機構23が例外処理を実行してエラーを報告するためにデバッグ情報221を要求するが、注釈情報222およびソース情報223を必要としない。同様に、コードがリフレクションを使用する場合、リフレクション・プロセスがソース情報223を要求することはあるが、デバッグ情報221を要求することはしない。図示の例では、エラー報告機構23は、スタック・トレース70を生じさせるために4個の情報片、即ち、クラス、メソッド、ファイルおよび回線番号を要求するJavaスタック・トレース報告メソッドである。通常、この情報は、例外が形成されるとき、仮想マシンによって取り込まれるが、これらの実施例では、ファイルおよび回線番号が、データベース60に格納されたデバッグ情報221の一部として除去された。従って、例外処理プロセス22およびエラー報告機構は、デバッグ情報221が格納されている記憶ロケーション60を見つけるためにキーを使用し、しかる後、スタック・トレース70が取り込まれるようデバッグ情報221をロードする。
次に図3を参照すると、例示的なJavaクラス・ファイル30が示され、そのファイル30は、10個の主要コンポーネント、即ち、マジック・ナンバ201、バージョン202、コンスタント・プール203、アクセス・フラグ204、当該クラス205、スーパ・クラス206、インターフェース207、フィールド208、メソッド209、また属性210を有する。属性は、デバッグ情報221、注釈情報222、およびソース情報223を含み得る。例示的なJavaクラス・ファイル30は、それの外来情報、この場合、デバッグ情報221、注釈情報222、およびソース情報223を、プログラム命令から区分けさせて記憶ロケーション60に格納させることにより、修正される。外来情報は、修正Javaクラス・ファイル35におけるキー224によって置換される。なお、そのキーは、外来情報が格納される記憶ロケーションを識別する。
Java技術に関連して、デバッグ情報221は下記のような属性を含み得る。
SourceFile:(1つのクラス当たり)パスを持たないソース・ファイル名(例えば、ClassName.java)
SourceDebugExtension:一般的に未使用
LineNumberTable:(1メソッド当たり)デバッガがステップ・スルーすべき行数、および例外スタック・トレースが印刷すべき行数(バイトコード・インデックスをソース・ファイルにおける行数にマップする)
LocalVariableTable:(1メソッド当たり)ステップ中のデバッガに対するローカル変数の名前、
LocalVariableTypeTable:(1メソッド当たり)汎用タイプ(および汎用のものだけ)の場合、ソース・ファイルにおけるローカル変数のタイプがVMにおけるタイプとは異なる。例えば、ソース・ファイル・タイプが汎用のハッシュ・テーブル<整数、ストリング>であってもよいが、仮想マシンはハッシュ・テーブルを見るであろう。
この情報はコードにおけるプログラム命令の正規の実行には不必要である。これは、それが一般的にはデバッグおよびスタック・トレースのためにしか使用されず、稼動プログラムでは他のいずれにも使用されないためである。
Java技術に関連して、注釈情報222は、下記のような属性を含み得る。
AnnotationDefault、
RuntimeVisibleAnnotations、
RuntimeInvisibleAnnotations、
RuntimeVisibleParameterAnnotations、
RuntimeInvisibleParameterAnnotations
さらに、Java技術に関連して、ソース情報223は、下記のような属性を含み得る。
EnclosingMethod::ローカル・クラスの囲みメソッドを識別する、
Signature: クラス、フィールド・タイプ、およびメソッドに対する汎用シグネチャを識別する、;
Deprecated: 非推奨のアイテムを識別する、
Synthetic:コンパイラ生成アイテムを識別する、
InnerClasses:内部および外部クラスの関係(ネストされたものおよび無名のものを含む)を識別する。
稼動中の仮想マシンはこの情報を必要としないので、この情報はコードにおけるプログラム命令の正規の実行にとって不必要である。この情報は一般にリフレクションのためにのみ使用される。従って、リフレクションを広範囲に利用するプログラムはこの情報の除去によって影響を受けることがあるが、一般には、ほとんどのプログラムが除去により影響されないであろう。
図4および図5を参照すると、第1実施例の区分けおよびメモリ最適化プロセスのためのプロセス300および400が概略的に示される。プロセス300は、ランタイム(例えば、クラスがロードされるとき)以外の時間に実行され、プロセス400は一般にランタイム時に行われ得る。プロセス300では、システム、例えば、図1のシステムが、ステップ310において、例えば、ポスト・プロセッサによって解析されることによりコードを受け取り、ステップ320において、そのコードにおける外来情報を識別する。ステップ330において、システムはコードから外来情報を除去し、ステップ340においてデータ記憶ロケーションにその除去された外来情報を格納する。ステップ350において、システムは、外来情報のロケーションを参照するために、キーをコードに挿入する。IBM J9システムのようなシステムでは、このプロセスが、JavaOptimizer(JAPT)クラス操作ツールのようなツールによって行なわれ得る。
オプショナル・ステップ360において、システムは、例えば、例外処理プロセスを中断し且つキーを使ってそれを記憶ロケーションにリダイレクトするように、複数のプログラム命令のうちの1つまたは複数個を修正することによって外来情報を直接的ではなく間接的にアクセスするよう、そのコードを書き換える。プロセスは、別の方法で、例えば、Throwable.getStackTrace()、Class.getDeclaredAnnotations()、およびClass.getGenericInterfaces()のような格納された外来情報を透過的にロードする固有機能のオペレーションを変更するようにクラス・ライブラリを修正することによって行なわれ得るので、このステップ360はオプショナルである。例えば、スタック・トレースの場合、クラス・ライブラリは、プログラム・カウンタをStackTraceElementに格納するように修正され得る。プログラム・カウンタは、StackTraceElementによって表わされたメソッド呼び出しが生じるバイトコード命令へのインデックスであり、回線番号デバッグ情報構造において回線番号を見つけるために使用される。オプショナル・ステップ370において、その修正コードは、共用クラス・キャッシュのようなキャッシュ・メモリに格納され得るので、クラスのその後のロードは、如何なるロード時間ペナルティも減らすために共用クラス・キャッシュからであってもよい。
図5に示されるように、ランタイム中に、システムは、ステップ410において、その修正コードをロードし、しかる後、ステップ420において、外来情報を必要とする事象、例えば、障害またはリフレクション・プロセスが生じたかどうかを判断する。いずれも生じない場合、このプロセス400は終了する。上記の事象が生じた場合、ステップ430において、システムはキーを使って記憶ロケーションにおける希望の外来情報を見つけ、ステップ440においてそれをロードする。しかる後、メモリ最適化プロセスは終了し、システムは、検索された外来情報を用いて任意の希望のアクションを行い得る。見つけられてロードされた外来情報は、1つまたは複数のタイプの外来情報、例えば、前述のデバッグ情報、注釈情報、またはソース情報であってもよい。システムは、特定の目的にとって望ましい外来情報だけを、例えば、そのシステムがスタック・トレースを作成している場合、それはそのスタック・トレースを取り込むために必要なデバッグ情報だけを見つけてロードし得るし、或いはそのシステムがリフレクションを使用する場合、それはリフレクションを遂行するために必要なソース情報だけを見つけてロードし得る。
図6〜図9は、本発明の第2実施例の種々の態様を示す。この実施例では、コードは、実行可能なコードと外来情報とを分離し、外来情報を廃棄することによって区分けされる。必要に応じて、外来情報はオリジナル・コードからロードされてもよい。この手法は、デバッグするための外来情報およびフィールドにおけるコードをサービスするために必要な他のプロセスのアクセシビリティを維持しながら、メモリ・フットプリントを減らすことによってメモリ使用量を最適化する。
図6は、本発明の第2実施例に従って、図1のシステムによって遂行され得る例示的な区分けおよびメモリ最適化プロセスを示す。このプロセスでは、Javaクラス・ファイルまたはCILコード・ファイルのようなコード30が、コード30における外来情報を識別する仮想マシン20におけるカスタム・ローダ21によって受け取られる。外来情報は非実行可能情報、例えばデバッグ情報、注釈情報、またはソース情報である。コード30は、外来情報を除去することにより修正されて修正コード35を創出し、オリジナル・コード30のロケーションを識別する一意的な識別キーが修正コード35に挿入される。
ランタイム時に、修正コード35が仮想マシン20に正規のものとしてロードされる。ランタイム中に外来情報に対する要求がある場合、システムは特定のタスクに必要な適切なタイプ外来情報だけを見つけてロードし得る。例えば、障害が生じた場合、例外処理プロセス22およびエラー報告機構23が例外処理を実行してエラーを報告するためにデバッグ情報を要求するが、注釈情報およびソース情報を必要としない。例外処理プロセス22およびエラー報告機構23は、オリジナル・コード30が格納されている記憶ロケーションを見つけるためにキーを使用し、スタック・トレースが取り込まれるようファイルからデバッグ情報をロードする。同様に、コードがリフレクションを使用する場合、リフレクション・プロセスは、ソース情報を必要とするがデバッグ情報必要としないことがある。オリジナルのコードが生成されるかまたはサーバからダウンロードされてローカルに存在しない場合、それは再び再生成またはダウンロードされることもある。
次に図7を参照すると、例示的なJavaクラス・ファイル30が示され、それは、10個の一次的コンポーネント、即ち、マジック・ナンバ201、バージョン202、一定プール203、アクセス・フラグ204、当該クラス205、スーパ・クラス206、インターフェース207、フィールド208、メソッド209、および属性210を有する。属性は、デバッグ情報221、注釈情報222、およびソース情報223を含み得る。例示的なJavaクラス・ファイル30は、それの外来情報、この場合には、デバッグ情報221、注釈情報222、およびソース情報223を、プログラム命令から区分けしてゴミ箱80または収集された不要情報内に廃棄されることによって修正される。外来情報は、オリジナル・コード30が格納されているロケーションまたは、例えば、ダウンロードによって検索可能であるロケーションを識別する、修正されたJavaクラス・ファイル35におけるキー224により置換される。
次に図8および図9を参照すると、第2実施例の区分けおよびメモリ最適化プロセスのためのプロセス500および600が概略的に示される。プロセス500は、ランタイム以外の時間に実行され得るか、またはランタイムに(例えば、クラスがロードされているときに)システムによって実行され得る。プロセス600は、一般にランタイム時に遂行される。プロセス500では、システム、例えば、図1のシステム)が、ステップ510において、例えば、オリジナル・コードを、クラス・ローダによりロードされることによってロードし、ステップ520においてそのコードにおける外来情報を識別する。ステップ530において、システムはそのコードから外来情報を除去し、ステップ540において、外来情報を含むオリジナル・コードが格納されるロケーションまたはそれが検索可能であるロケーションを参照するためにそのコードにキーを挿入する。IBM J9システムのようなシステムでは、このプロセスは、JavaOptimizer(JAPT)クラス操作ツールのようなツールによって行なわれ得るか、或いは、ランタイム時に、それは、拡張ローディング・プロセスの一部としてランタイムJ9システムによって遂行され得る。ラン・タイム・システムによって遂行されるとき、その修正コードは、仮想マシン内に格納されているコードおよび任意選択的にキャッシュ内に格納されているコードを表わすものである。
オプショナル・ステップ550において、システムは、例えば、例外処理プロセスを中断し且つキーを使ってその格納されたコードにそれをリダイレクトするように複数のプログラム命令のうちの1つまたは複数個を修正することによって、外来情報を直接的にアクセスする代わりに間接的にアクセスするよう、そのコードを書き換える。このステップはオプショナルである。というのは、そのプロセスは、別の方法で、例えば、Throwable.getStackTrace()、Class.getDeclaredAnnotations()、およびClass.getGenericInterfaces()のような格納されたコードから外来情報を透過的にロードすべくネイティブ機能のオペレーションを変更するようにクラス・ライブラリを修正することによって行われてもよいためである。例えば、スタック・トレースの場合、クラス・ライブラリはStackTraceElementにプログラム・カウンタを格納するように修正されてもよい。プログラム・カウンタは、StackTraceElementによって表わされるメソッド呼び出しが生じるバイトコード命令に対するインデックスであり、回線番号デバッグ情報構造において回線番号を見つけるために使用される。オプショナル・ステップ560において、その修正コードは共有クラス・キャッシュのようなキャッシュ・メモリに格納され得るので、クラスのその後のロードは、いずれのロード・タイム・ペナルティも減らすためには共有クラス・キャッシュからのものであってもよい。
図9に示されるように、ランタイム中、システムは、ステップ610において、修正コードをロードし、しかる後ステップ620において、外来情報を必要とする事象、例えば、障害またはリフレクション・プロセスが生じたかどうかを判断する。それが生じなかった場合、このプロセス600は終了する。それが生じた場合、システムは、ステップ630において、オリジナル・コードが格納されているロケーションまたはそれが検索可能であるロケーションにおいて希望の外来情報を見つけるためにキーを使用し、ステップ640において、それをロードする。しかる後、メモリ最適化プロセスは終了し、システムは、検索された外来情報を用いて任意の希望のアクションを遂行し得る。その見つけられ且つロードされた外来情報は、前述の1つまたは複数のタイプの外来情報、例えば、デバッグ情報、注釈情報、およびソース情報であってもよい。システムは、特定の目的にとっては望ましい外来情報だけをロードし得る。例えば、システムがスタック・トレースを作成している場合、それは、そのスタック・トレースを取り込むために必要なデバッグ情報だけを見つけてロードし得るし、或いはシステムがリフレクションを使用する場合、それは、リフレクションを遂行するために必要なソース情報だけを見つけてロードし得る。
当業者には明らかなように、本発明の実施態様は、システム、方法、またはコンピュータ・プログラムとして具現化され得る。従って、本発明の実施態様は、全体的にハードウェアの実施例、全体的にソフトウェアの実施例(ファームウェア、駐在ソフトウェア、マイクロコード等を含む)、または、本明細書ではすべて「回路」、「モジュール」、もしくは「システム」として一般的に参照されるソフトウェアおよびとハードウェア態様を組み合わせた実施例の形式をとり得る。更に、本発明の実施態様は、コンピュータ可読プログラム・コードを具現化した1つまたは複数のコンピュータ可読媒体として具現化されたコンピュータ・プログラムの形式をとり得る。
1つまたは複数のコンピュータ可読媒体の任意の組み合わせが利用され得る。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であってもよい。コンピュータ可読媒体は、例えば、電子的、磁気的、光学的、電磁気的、赤外線、もしくは、半導体システム、装置、またはデバイス、或いはそれらの任意の適切な組み合わせであってもよいが、それらに限定されない。コンピュータ可読記憶媒体の更に特殊な例(限定的リスト)は、下記のものを含むであろう。即ち、それは、1つまたは複数のワイヤ、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROMもしくはフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスクを使った読取り専用メモリ(CD−ROM)、光学的記憶装置、磁気記憶装置、または上記のものの任意の適切な組み合わせを有する電気的な接続を含むであろう。本明細書に関連して、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによって或いはそれに関連して使用するためのプログラムを含むまたは格納することができる任意の実体的な媒体であってもよい。
コンピュータ可読信号媒体は、例えば、搬送波のベースバンドで、または搬送波の一部として、具現化されたコンピュータ可読プログラム・コードを備えた伝播データ信号を含み得る。そのような伝播信号は、電磁気的信号、光学的信号、またはそれの任意の適当な組み合わせを含むがそれに限定されない任意の様々な形式をとり得る。コンピュータ可読信号媒体は、命令実行システム、装置、またはデバイスによる使用、或いはそれらと関連した使用のためにプログラムを通信、伝播、または搬送することができる、コンピュータ可読記憶媒体ではない任意のコンピュータ可読媒体であってもよい。コンピュータ可読媒体上に具現化されたプログラム・コードは、無線、有線、光通信ケーブル、RF等またはそれらの任意の適当な組み合わせを含むがそれに限定されない任意の適切な媒体を使用して送信され得る。
本発明の実施態様に関するオペレーションを実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、C++等のようなオブジェクト指向プログラミング言語、およびを「C」プログラミング言語または同様のプログラミング言語のような従来の手続的なプログラミング言語あるいは同様のプログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで書かれることも可能である。プログラム・コードは、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アロンのパッケージ・ソフトのように部分的にユーザのコンピュータおよび部分的には遠隔のコンピュータ上で、或いは全体的に遠隔のコンピュータまたはサーバ上で実行され得る。後述するように、遠隔のコンピュータは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続され得るし、或いは、外部コンピュータへの接続は、(例えば、インターネット・サービス・プロバイダを利用してインターネットを介して)行われ得る。
本発明の実施例におけるコンピュータ・システムのためのソフトウェアは任意の希望のコンピュータ言語で具現化され得るし、本明細書に含まれた機能的説明および図面に示されたフローチャートに基づいて当業者により開発され得るであろう、ということは当然である。ほんの一例として、そのソフトウェアは、C#、C++、Python、Java、またはPHPプログラミング言語において具現化され得る。更に、様々な機能を遂行するソフトウェアに関する本明細書における参照は、一般に、ソフトウェア制御の下でそれらの機能を遂行するコンピュータ・システムまたはプロセッサを指す。
本発明の実施例におけるコンピュータ・システムは、任意のタイプのハードウェアおよび/または他の処理回路によって代替的で具現化され得る。コンピュータ・システムの種々の機能は、任意の量のソフトウェア・モジュールまたはユニット、処理またはコンピュータ・システム、および/または回路の間に任意の態様で分散され得る。なお、コンピュータまたは処理システムは、相互にローカル的にまたは遠隔的に配置され、任意の適切な通信媒体(例えば、LAN、WAN、イントラネット、インターネット、配線、モデム接続、無線等)を介して通信し得る。
本発明の実施態様は、本発明の実施例に従って方法、装置(システム)およびコンピュータ・プログラムのフローチャートおよび/またはブロック図に関連して説明される。フローチャートおよび/またはブロック図の各ブロック、およびフローチャートおよび/またはブロック図におけるブロックの組み合わせがコンピュータ・プログラム命令によって具現化され得る、ということは明らかであろう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを通して実行される命令がフローチャートおよび/またはブロック図のブロックにおいて指定された機能/行為を具現化するための手段を形成するようにマシンを創出し得る。
これらのコンピュータ・プログラム命令はコンピュータ可読媒体にも格納され、そのコンピュータ可読媒体に格納された命令が、フローチャートおよび/またはブロック図のブロックで指定された機能/行為を具現化する命令を含む1つの製造物を創出するというような特定の態様で機能するよう、コンピュータ、他のプログマブル・データ処理装置、または他のデバイスに指示し得る。コンピュータ・プログラム命令は、コンピュータ、他のプログマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログマブル・データ処理装置、または他のデバイス上で一連のオペレーション・ステップを遂行させ、コンピュータまたは他のマブル装置上で実行される命令が、フローチャートおよび/またはブロック図のブロックにおいて指定された機能/行為を具現化するためのプロセスを提供するというようなコンピュータ実装プロセスを創出し得る。
プログラム・コードを格納および/または実行するに適したに処理システムは、好ましくは、ディスプレイもしくはモニタ、ベース(例えば、プロセッサ、メモリ、または内部もしくは外部通信装置(例えば、モデム、ネットワーク・カード等)、および光学的入力装置(例えば、キーボード、マウス、または他の入力装置))を備えた、任意の一般的なもしくは他のコンピュータまたは処理システムによって具現化され得る。システムは、システム・バスを介してメモリ素子に直接または間接的に結合された少なくとも1つのプロセッサを含み得る。メモリ素子は、プログラム・コードの実行中に使用されるローカル・メモリ、大容量記憶装置、および、コードが実行中に大容量記憶装置から検索されなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的記憶を行うキャッシュ・メモリを含み得る。入出力装置、即ちI/O装置(キーボード、ディスプレイ、ポインティング装置等を含むが、それらに限定されない)は、直接にまたは介在I/Oコントローラを介してシステム結合され得る。ネットワーク・アダプタもシステムに結合され、介在する私設または公衆ネットワークを介してシステムが他の処理システム、遠隔のプリンタ、または記憶装置に結合されることを可能にする。モデム、ケーブル・モデム、およびEthernetカードは、数少ない現在利用可能なタイプのネットワーク・アダプタである。
図面におけるフローチャートおよびブロック図は、本発明の様々な実施例に従って、システム、方法およびコンピュータ・プログラムの可能な実施態様のアーキテクチャ、機能、およびオペレーションを示す。この点に関して、フローチャートまたはブロック図における各ブロックは、指定された論理機能を具現化するための1つまたは複数の実行可能な命令を含むモジュール、セグメント、またはコードの部分を表し得る。或る別の実施態様では、ブロックに記された機能は図に書かれた順序から外れて生じることもあるということに留意されたい。例えば、連続して示された2つのブロックが、実際には、実質的に同時に実行されることがあるし、それらのブロックが、関連する機能に依存して、逆の順序で実行されることもある。更に、ブロック図および/またはフローチャートの各ブロック、並びにブロック図および/またはフローチャートにおけるブロックの組み合わせは、指定された機能もしくは行為、または特殊目的のハードウェアおよびコンピュータ命令の組み合わせを遂行する特殊目的のハードウェア・ベースのシステムによって具現化され得るということにも留意されたい。
本明細書で使用された用語は、特定の実施例のみを説明する目的のものであり、本発明を限定することを意図するものではない。本明細書で使用されたときの「含む」という用語は、開示された特徴、整数、ステップ、オペレーション、要素、および/またはコンポーネントの存在を明示するが、1つまたは複数の特徴、整数、ステップ、オペレーション、要素、コンポーネント、および/またはそれのグループの存在または追加を妨げるものではない。

Claims (25)

  1. 仮想マシン・コードまたはインタープリットされたコードを最適化するための方法であって、
    複数のプログラム命令と第1のタイプの非実行可能情報である第1の外来情報とを含むコードであって、仮想マシンによる実行のための言語で書かれたコードを受け取るステップと、
    前記第1の外来情報を除去し、前記第1の外来情報のロケーションを参照するキーでもって前記第1の外来情報を置換することによって前記コードを修正するステップと、
    修正コードを実行し、実行中に前記第1の外来情報を要求する事象が生じた場合、前記事象に応答して、前記キーを使って前記ロケーションにおける前記第1の外来情報を見つけ、前記ロケーションから前記第1の外来情報をロードするステップと
    を含む、方法。
  2. 前記事象は障害であり、前記第1のタイプの非実行可能情報はデバッグ情報である、請求項1に記載の方法。
  3. 例外処理プロセスをインターセプトし、前記キーを使って前記例外処理プロセスを前記第1の外来情報のロケーションにリダイレクトするよう、前記複数のプログラム命令のうちの1つまたは複数個を修正するステップを更に含む、請求項2に記載の方法。
  4. 前記コードは第2の外来情報を含み、第2の外来情報は第2のタイプの非実行可能情報であり、前記第1のタイプおよび前記第2のタイプの非実行可能情報は異なる、請求項1に記載の方法。
  5. 前記第2のタイプの非実行可能情報はソース情報または注釈情報である、請求項4に記載の方法。
  6. 前記コードはJava(登録商標)クラス・ファイルまたはJavaArchive(JAR)ファイルであり、前記複数のプログラム命令はJavaバイトコード命令である、請求項1に記載の方法。
  7. 前記コードは.NETコード・ファイルであり、前記複数のプログラム命令はCommonIntermediate Language(CIL)バイトコード命令である、請求項1に記載の方法。
  8. 前記言語はインタープリットされた言語である、請求項1に記載の方法。
  9. 前記ロケーションは記憶ロケーションであり、
    前記除去された第1の外来情報を前記記憶ロケーションに格納するステップを更に含む、
    請求項1に記載の方法。
  10. 前記ロケーションは前記コードが格納される記憶ロケーションであり、前記ロードするステップは前記記憶ロケーションから前記コードをロードする、請求項1に記載の方法。
  11. 前記ロケーションは前記コードが検索され得るロケーションであり、前記ロードするステップは前記ロケーションから前記コードを検索する、請求項1に記載の方法。
  12. コンピュータ上で実行されるコンピュータ可読プログラムであって、
    複数のプログラム命令と第1のタイプの非実行可能情報である第1の外来情報とを含むコードであって、仮想マシンによる実行のための言語で書かれたコードを前記コンピュータに受け取らせ、
    前記第1の外来情報を除去し、前記第1の外来情報のロケーションを参照するキーでもって前記第1の外来情報を置換することによって前記コードを前記コンピュータに修正させ、
    修正コードを前記コンピュータに実行させ、実行中に前記第1の外来情報を要求する事象が生じた場合、前記事象に応答して、前記キーを使って前記ロケーションにおける前記第1の外来情報を前記コンピュータに見つけさせ、前記ロケーションから前記第1の外来情報を前記コンピュータにロードさせる
    コンピュータ可読プログラム。
  13. 前記事象は障害であり、前記第1のタイプの非実行可能情報はデバッグ情報であり、
    例外処理プロセスをインターセプトし、前記キーを使って前記例外処理プロセスを前記第1の外来情報のロケーションにリダイレクトするよう、前記複数のプログラム命令のうちの1つまたは複数個を前記コンピュータに修正させる、請求項12に記載のコンピュータ可読プログラム。
  14. 前記ロケーションは記憶ロケーションであり、
    前記除去された第1の外来情報を前記記憶ロケーションに、前記コンピュータに格納させる、請求項12に記載のコンピュータ可読プログラム。
  15. 前記ロケーションは前記コードが格納されるロケーションまたは前記コードが検索され得るロケーションであり、前記ロードすることは前記ロケーションから前記第1の外来情報を含む前記コードをロードすることを含む、請求項12に記載のコンピュータ可読プログラム。
  16. 前記仮想マシンはCommon Language Runtime(CLR)仮想マシンである、請求項12に記載のコンピュータ可読プログラム。
  17. 前記仮想マシンはJava VirtualMachine(JVM)である、請求項12に記載のコンピュータ可読プログラム。
  18. 前記言語はJavaScript(登録商標)である、請求項17に記載のコンピュータ可読プログラム。
  19. 前記コンピュータ可読プログラムはコンピュータ使用可能光学的記憶媒体に格納される、請求項12に記載のコンピュータ可読プログラム。
  20. 前記コンピュータ可読プログラムはハード・ディスクに格納される、請求項12に記載のコンピュータ可読プログラム。
  21. 複数のプログラム命令と第1のタイプの非実行可能情報である第1の外来情報とを含むコードであって、仮想マシンによる実行のための言語で書かれたコードをロードするためのロジックと、
    前記第1の外来情報を除去し、前記第1の外来情報のロケーションを参照するキーでもって前記第1の外来情報置換することによって前記コードを修正するためのロジックと、
    修正コードを実行し、実行中に前記第1の外来情報を要求する事象が生じた場合、前記事象に応答して、前記キーを使って前記第1の外来情報を前記ロケーションにおいて見つけ、前記ロケーションから前記第1の外来情報をロードするためのロジックと
    で構成されたプロセッサを含む、システム。
  22. 前記事象は障害であり、前記第1のタイプの非実行可能情報はデバッグ情報であり、
    前記プロセッサは、例外処理プロセスをインターセプトし、前記キーを使って前記例外処理プロセスを前記第1の外来情報のロケーションにリダイレクトするよう、前記複数のプログラム命令のうちの1つまたは複数個を修正するためのロジックで構成される、請求項21に記載のシステム。
  23. 前記ロケーションは記憶ロケーションであり、
    前記プロセッサは、前記除去された第1の外来情報を前記記憶ロケーションに格納するためにロジックで構成される、請求項21に記載のシステム。
  24. 前記ロケーションは前記コードが格納されるロケーションまたは前記コードが検索され得るロケーションであり、前記ロードすることは前記ロケーションから前記第1の外来情報を含む前記コードをロードすることを含む、請求項21に記載のシステム。
  25. 前記仮想マシンはCommon Language Runtime(CLR)仮想マシンまたはJava Virtual Machine(JVM)である、請求項21に記載のシステム。
JP2010262977A 2009-11-30 2010-11-25 外来情報を区分けすることにより仮想マシン・コードをメモリ最適化する方法、コンピュータ・プログラム、およびシステム Active JP5602597B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/627206 2009-11-30
US12/627,206 US8627303B2 (en) 2009-11-30 2009-11-30 Memory optimization of virtual machine code by partitioning extraneous information

Publications (2)

Publication Number Publication Date
JP2011118901A JP2011118901A (ja) 2011-06-16
JP5602597B2 true JP5602597B2 (ja) 2014-10-08

Family

ID=44069822

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010262977A Active JP5602597B2 (ja) 2009-11-30 2010-11-25 外来情報を区分けすることにより仮想マシン・コードをメモリ最適化する方法、コンピュータ・プログラム、およびシステム

Country Status (4)

Country Link
US (1) US8627303B2 (ja)
JP (1) JP5602597B2 (ja)
KR (1) KR101699981B1 (ja)
CN (1) CN102081546B (ja)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8701088B2 (en) * 2010-05-28 2014-04-15 Red Hat, Inc. Generating backtracing information for software debugging of software programs running on virtual machines
JP5466601B2 (ja) * 2010-08-31 2014-04-09 インターナショナル・ビジネス・マシーンズ・コーポレーション コード生成方法、システム及びプログラム
US8375443B1 (en) * 2011-09-27 2013-02-12 Google Inc. Code annotations for preventing access to unsafe functionality
US9183113B2 (en) 2011-09-29 2015-11-10 Oracle International Corporation Debugging analysis in running multi-user systems
US9027075B2 (en) * 2011-09-29 2015-05-05 Oracle International Corporation Enforcing security rules at runtime
US9111033B2 (en) 2012-04-17 2015-08-18 International Business Machines Corporation Compiling source code for debugging with user preferred snapshot locations
US8910126B2 (en) 2012-04-18 2014-12-09 International Business Machines Corporation Compiling source code for debugging with variable value restoration based on debugging user activity
US9274772B2 (en) * 2012-08-13 2016-03-01 Microsoft Technology Licensing, Llc. Compact type layouts
US9122794B2 (en) 2012-10-30 2015-09-01 Oracle International Corporation System and method for debugging domain specific languages
US9104797B1 (en) * 2013-03-21 2015-08-11 Intuit Inc. Efficient cloud-based annotation of crash reports
CN103413069B (zh) * 2013-07-08 2016-09-07 北京深思数盾科技股份有限公司 一种保护面向对象语言编写的软件的方法
CN103413073B (zh) * 2013-07-09 2016-01-20 北京深思数盾科技有限公司 一种保护java可执行程序的方法及设备
CN103413075B (zh) * 2013-07-10 2016-05-04 北京深思数盾科技股份有限公司 一种通过虚拟机保护java可执行程序的方法及设备
US9146834B2 (en) 2013-08-22 2015-09-29 Oracle International Corporation Targeted cloud-based debugging
US9721092B2 (en) 2014-03-27 2017-08-01 International Busines Machines Corporation Monitoring an application in a process virtual machine
US9772865B2 (en) * 2015-02-23 2017-09-26 Futurewei Technologies, Inc. On-demand loading of dynamic scripting language code for reduced memory usage
US9916220B2 (en) * 2015-03-26 2018-03-13 EMC IP Holding Company LLC Smart logging of trace data for storage systems
EP3311266A4 (en) * 2015-07-17 2018-09-12 Enhance, Inc. A method and system for modifying machine instructions within compiled software
US9626171B2 (en) 2015-07-24 2017-04-18 Oracle International Corporation Composing a module system and a non-module system
US10078497B2 (en) 2015-07-24 2018-09-18 Oracle International Corporation Bridging a module system and a non-module system
GB2541400B (en) * 2015-08-17 2017-11-15 Advanced Risc Mach Ltd Tracing of exception handling events
US10158647B2 (en) * 2015-08-25 2018-12-18 Oracle International Corporation Permissive access control for modular reflection
US10394528B2 (en) 2016-03-30 2019-08-27 Oracle International Corporation Returning a runtime type loaded from an archive in a module system
US10191753B2 (en) 2016-03-30 2019-01-29 Oracle International Corporation Generating verification metadata and verifying a runtime type based on verification metadata
US10387142B2 (en) 2016-09-16 2019-08-20 Oracle International Corporation Using annotation processors defined by modules with annotation processors defined by non-module code
US10282184B2 (en) 2016-09-16 2019-05-07 Oracle International Corporation Metadata application constraints within a module system based on modular dependencies
JP6845429B2 (ja) 2017-03-15 2021-03-17 富士通株式会社 コンパイラプログラム、情報処理装置およびコンパイル方法
US10848410B2 (en) 2017-03-29 2020-11-24 Oracle International Corporation Ranking service implementations for a service interface
US11720340B2 (en) 2019-07-30 2023-08-08 Hewlett-Packard Development Company, L.P. Hash map of executable control blocks
CN112566307B (zh) * 2019-09-10 2022-11-04 酷矽半导体科技(上海)有限公司 安全显示***及安全显示方法
JP2023018290A (ja) * 2021-07-27 2023-02-08 富士通株式会社 解析プログラム、解析装置、及び解析方法
CN115328690B (zh) * 2022-10-13 2023-02-17 北京登临科技有限公司 异常处理方法、计算机可读介质及电子设备

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3352893B2 (ja) * 1996-12-11 2002-12-03 株式会社日立製作所 デバッグ情報作成方法、デバッグ方法及びデバッグシステム
WO2000034866A1 (fr) * 1998-12-07 2000-06-15 Sony Corporation Ordinateur, support d'enregistrement stockant un programme de traitement d'exceptions et procede de traitement d'exceptions
JP2001236243A (ja) * 2000-02-22 2001-08-31 Nec Microsystems Ltd デバッグ方法、および、デバッグ用プログラムを記録した記録媒体
US6857063B2 (en) 2001-02-09 2005-02-15 Freescale Semiconductor, Inc. Data processor and method of operation
JP4192519B2 (ja) * 2002-07-24 2008-12-10 株式会社日立製作所 情報処理方法および装置
EP1387265A1 (en) 2002-08-02 2004-02-04 Telefonaktiebolaget L M Ericsson (Publ) Optimised code generation
US7225431B2 (en) 2002-10-24 2007-05-29 International Business Machines Corporation Method and apparatus for setting breakpoints when debugging integrated executables in a heterogeneous architecture
AU2002363920A1 (en) * 2002-10-29 2004-05-25 Freescale Semiconductor, Inc. Method and apparatus for selectively optimizing interpreted language code
US7707566B2 (en) 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7631356B2 (en) * 2005-04-08 2009-12-08 Microsoft Corporation System and method for foreign code detection
US8453132B2 (en) * 2006-07-28 2013-05-28 Hewlett-Packard Development Company, L.P. System and method for recompiling code based on locality domain and thread affinity in NUMA computer systems
US7475214B2 (en) * 2006-08-16 2009-01-06 International Business Machines Corporation Method and system to optimize java virtual machine performance
CN100485637C (zh) 2006-10-13 2009-05-06 中兴通讯股份有限公司 一种基于嵌入式应用***实现硬件寄存器的方法
CN100474266C (zh) 2007-04-24 2009-04-01 上海华龙信息技术开发中心 一种用于数字信号处理器的调试***及其调试方法
US8286152B2 (en) * 2007-08-22 2012-10-09 International Business Machines Corporation Systems, methods, and computer products for just-in-time compilation for virtual machine environments for fast application startup and maximal run-time performance
US20090172648A1 (en) * 2007-12-28 2009-07-02 Gerginov Georgi A Byte code analysis library

Also Published As

Publication number Publication date
JP2011118901A (ja) 2011-06-16
KR20110060822A (ko) 2011-06-08
KR101699981B1 (ko) 2017-01-26
CN102081546B (zh) 2013-12-18
US20110131561A1 (en) 2011-06-02
CN102081546A (zh) 2011-06-01
US8627303B2 (en) 2014-01-07

Similar Documents

Publication Publication Date Title
JP5602597B2 (ja) 外来情報を区分けすることにより仮想マシン・コードをメモリ最適化する方法、コンピュータ・プログラム、およびシステム
CN1108560C (zh) 用于存储与多种编程语言相关的执行数据的方法和装置
US8434057B2 (en) Optimized implementation of breakpoint in java debugger agent
US8972960B2 (en) Optimization of an application to reduce local memory usage
US20200249925A1 (en) On-demand loading of dynamic scripting language code for reduced memory usage
US8549502B2 (en) Compiler with user-defined type inference rules
KR20150024842A (ko) 적응식 이식가능 라이브러리
US20150121533A1 (en) Dynamic analysis interpreter modification for application dataflow
CN108595187A (zh) 安卓安装包集成软件开发工具包的法、装置及存储介质
US10229045B2 (en) Conditional stack frame allocation
US8769498B2 (en) Warning of register and storage area assignment errors
JP5536593B2 (ja) 最適化装置、最適化方法およびコンパイラ・プログラム
US9760282B2 (en) Assigning home memory addresses to function call parameters
CN107077365B (zh) 有选择地加载预编译的头部和/或其部分
US11662983B2 (en) Bytecode verification using class relationship caching
US20220308991A1 (en) Test processing method and information processing apparatus
WO2019118338A1 (en) Systems and methods for mapping software applications interdependencies
CN113139190A (zh) 程序文件检测方法、装置、电子设备及存储介质
CN112528273B (zh) 医疗数据的探测方法、装置、介质及电子设备
US20150220310A1 (en) Object field optimization
CN114168489A (zh) 一种函数信息获取方法、计算设备及存储介质
CN114547559A (zh) 符号混淆方法、装置、介质和计算设备
CN116010100A (zh) 区块链***中的合约调用方法、装置、设备及存储介质
JP2017122949A (ja) プログラムおよびコンピュータ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130902

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140312

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140408

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140708

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: 20140729

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140820

R150 Certificate of patent or registration of utility model

Ref document number: 5602597

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150