JP2016528638A - ランタイムメモリスロットリング - Google Patents

ランタイムメモリスロットリング Download PDF

Info

Publication number
JP2016528638A
JP2016528638A JP2016534581A JP2016534581A JP2016528638A JP 2016528638 A JP2016528638 A JP 2016528638A JP 2016534581 A JP2016534581 A JP 2016534581A JP 2016534581 A JP2016534581 A JP 2016534581A JP 2016528638 A JP2016528638 A JP 2016528638A
Authority
JP
Japan
Prior art keywords
memory
calls
policy
code
call
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
JP2016534581A
Other languages
English (en)
Other versions
JP6505700B2 (ja
JP2016528638A5 (ja
Inventor
ドリスコル,ジェイムズ・ジョージ
Original Assignee
オラクル・インターナショナル・コーポレイション
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 オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Publication of JP2016528638A publication Critical patent/JP2016528638A/ja
Publication of JP2016528638A5 publication Critical patent/JP2016528638A5/ja
Application granted granted Critical
Publication of JP6505700B2 publication Critical patent/JP6505700B2/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/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/504Resource capping
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

ソフトウェアコードのコンパイルの開始に応答して構文ツリーを受取るとメモリ管理ポリシーを実行時に実現するシステムは、構文ツリー内の複数のコールを識別し、複数のメモリ変更済みコールを作成するために、複数のコールの各々を対応するメモリ変更済みコールにより変更する。各メモリ変更済みコールはメモリ管理クラスとリンクされ、変更することは、ソフトウェアコードのコンパイル中に生じる。複数のコールの各々の変更に引続いて、システムは、複数のメモリ変更済みコールをコンパイルしてバイトコードを生成する。

Description

関連する出願の相互参照
本願は、2013年8月15日付けで提出された仮特許出願番号第61/866,223号の優先権を主張し、その内容を引用によって本明細書に援用する。
分野
一実施形態は、概してコンピュータシステムに、特にソフトウェア命令をコンパイルするコンピュータシステムに向けられる。
背景情報
すべての種類のコンピュータシステムについて、メモリは限定されたリソースであり得る。コンピューティングシステムがどれほど高速になっても、ソフトウェアアプリケーションを実行するために有限量のメモリに常に依存している。その結果、ソフトウェア開発者は、ソフトウェアアプリケーションを書込んだり開発するときには、利用可能なメモリリソースを典型的に考慮する。
JAVA(登録商標)プログラミング言語は、一度書けばどこでも実行できる移植性、マルチスレッド化プログラミングのための移植可能サポート、リモートメソッド起動およびガベージコレクションを含む分散型プログラミングのサポートなどの、大規模分散型システムの開発者の興味を引くいくつかの特徴を呈する。しかしながら、JAVAは、メモリが割り当ておよび割り当て解除されるやり方が、多くの従来のプログラミング言語とは異なる。CおよびC++などの多くのプログラミング言語は、アプリケーションプログラマ/開発者によるメモリの割り当ておよび割り当て解除を明白に考慮に入れている。対照的に、JAVA仮想マシン(VM)は、JAVAアプリケーションのプログラマにとって故意に不透明な構造によってメモリを管理する。メモリを使い切ったあるスレッドは他の実行中のスレッドを壊す可能性があるため、この不透明性は、サーバVMなどの共用ユーザ環境においてスクリプトを実行する際に問題となる。このスレッド間コンタミネーション(contamination)は、JAVA VM全体をシャットダウンさせる可能性がある。
概要
一実施形態は、ソフトウェアコードのコンパイルの開始に応答して構文ツリーを受取るとメモリ管理ポリシーを実行時(runtime)に実現するシステムである。システムは、構文ツリー内の複数のコールを識別し、各複数のコールを対応するメモリ変更済みコールにより変更して、複数のメモリ変更済みコールを作成する。各メモリ変更済みコールはメモリ管理クラスとリンクされ、変更は、ソフトウェアコードのコンパイル中に生じる。複数のコールの各々の変更に引続いて、システムは、複数のメモリ変更済みコールをコンパイルしてバイトコードを生成する。
本発明の実施形態に係るコンピュータサーバ/システムのブロック図である。 一実施形態に従って実行時にメモリをスロットリングする際の図1のメモリスロットリングモジュールの機能のフローチャートである。 別の実施形態に従って実行時にメモリをスロットリングする際の図1のメモリスロットリングモジュールの機能のフローチャートである。 別の実施形態に従ってコンパイル中に変更された構文ツリーを用いて作成されたバイトコードを実行するための図1のメモリスロットリングモジュールの機能のフローチャートである。
詳細な説明
一実施形態は、メモリ内のプログラムをコンパイルしつつ、新たなオブジェクトを作成するすべてのコールを遮断し、JAVA VMメモリの注意事項/制約に鑑みて新たなオブジェクトを作成することができるかどうかをメモリポリシーに基づいて判定する。新たなオブジェクトの作成がメモリに悪影響を与えない場合は、オブジェクトを作成することができる。メモリ内オブジェクトの意図しない制御不能な作成(run-away creation)を阻止することによって、実施形態は、マルチユーザサーバ上で実行されるスクリプトをエンドユーザが入力することが可能となるシステムの安定性および性能を著しく向上させる。
図1は、本発明の実施形態に係るコンピュータサーバ/システム10のブロック図である。単一のシステムとして示されているが、システム10の機能は分散型システムとして実現することができる。さらに、本明細書に開示される機能は、ネットワークで互いに結合され得る別個のサーバまたは装置上で実現することができる。さらに、システム10の1つ以上のコンポーネントは含まれなくてもよい。たとえば、ユーザクライアントの機能について、システム10は、プロセッサ、メモリおよびディスプレイを含むスマートフォンであってもよいが、図1に示される他のコンポーネントのうち1つ以上を含まなくてもよい。
システム10は、情報を通信するためのバス12または他の通信機構と、情報を処理するためにバス12に結合されたプロセッサ22とを含む。プロセッサ22は、いずれかの種類の汎用または特定用途プロセッサであり得る。システム10は、情報とプロセッサ22によって実行される命令とを格納するためのメモリ14をさらに含む。メモリ14は、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、磁気もしくは光ディスクなどのスタティックストレージ、またはいずれかの他の種類のコンピュータ読取可能媒体のいずれかの組合せで構成することができる。システム10は、ネットワークへのアクセスを提供するために、ネットワークインターフェイスカードなどの通信装置20をさらに含む。したがって、ユーザは、直接的に、またはネットワークもしくはいずれかの他の方法によってリモートで、システム10と接続し得る。
コンピュータ読取可能媒体は、プロセッサ22によってアクセスすることができ、揮発性媒体および不揮発性媒体の両方、取外し可能な媒体および取外し不可能な媒体、ならびに通信媒体を含むいずれかの利用可能な媒体であり得る。通信媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュール、または搬送波もしくは他の移送機構などの変調されたデータ信号中の他のデータを含んでもよく、いずれかの情報配信媒体を含む。
プロセッサ22はさらに、バス12によって液晶ディスプレイ(LCD)などのディスプレイ24に結合される。キーボード26およびコンピュータマウスなどのカーソル制御デバイス28がバス12にさらに結合されて、ユーザがシステム10と接続することが可能となる。
一実施形態では、メモリ14は、プロセッサ22によって実行されると機能を提供するソフトウェアモジュールを格納する。モジュールは、オペレーティングシステム機能をシステム10に提供するオペレーティングシステム15を含む。モジュールは、実行時にメモリをスロットリングするためのメモリスロットリングモジュール16と、本明細書に開示されるすべての他の機能とをさらに含む。システム10は、より大きなシステムの一部であり得る。したがって、システム10は、1つ以上の付加的な機能モジュール18を含んで、付加的なGROOVY(登録商標)またはJAVA関連機能などの付加的な機能を含むことができる。データベース17はバス12に結合されて、モジュール16および18に集中記憶装置を提供する。
一実施形態は、コンパイルプロセス中に構文ツリーの変更を可能にするプログラミング言語を使用し、1つ以上のメモリスロットリングルール(以下「メモリポリシー」と称する)を実現する。一例として、ユーザは、コンパイルおよび実行のためにリモートコンピュータシステムからサーバにコードを送信し得る。このサーバは、ユーザとは別個の第三者によって操作されてもよく、第三者は、ある動作がユーザのコードによって行なわれることを防ぐメモリポリシーを強化することを所望し得る。(サーバに対してリモートまたはローカルな)ユーザによって送信されたコードはメモリポリシー機能を含んでいないことがあるが、サーバは、ユーザによって供給されたコードに基づいて構文ツリーにおけるメソッドコールを変更し得る。構文ツリーがコードに基づいて作成されると、構文ツリーの解析が行なわれ得る。解析は、メモリポリシーに従って厳しく禁止される様々なメソッド、コンストラクタアクセス、および/またはプロパティアクセスを識別することができる。メモリポリシーのこれらの妨害は、コードがバイトコードにコンパイルされるのを妨げることがあり、例外が出力されることになり得る。例外の表示はユーザに提示され得る。
一実施形態では、プログラミング言語は「GROOVY」プログラミング言語、またはバイトコード(またはマシンコード)が生成される前のコンパイルプロセス中に構文ツリーへのアクセスを許可する何らかの他のプログラミング言語である。GROOVYは、JAVAプラットフォームのためのオブジェクト指向プログラミング言語である。一般に、GROOVYはJAVAの上位セットであり、したがってJAVAコードはGROOVYにおいて構文的に有効である可能性がある。GROOVYは、JAVAにおいて利用可能なものに加えて、付加的な構文および特徴を含む。JAVAと同様に、GROOVYコードはバイトコードにコンパイルすることができる。このバイトコードは、仮想マシン(VM)によってマシンコードに変換することができる。
GROOVYコードがコンパイルされているとき、バイトコードが生成される前に、抽象構文ツリー(abstract syntax tree:AST)がコードに基づいて作成される。構文ツリーの形態にある間、実施形態は、バイトコードが作成される前にASTを編集する。したがって、バイトコードの作成、およびバイトコードが実行時にどのように実行することになるかに影響することになるASTに対して様々な変更をなすことができる。GROOVYを用いる代わりに、他の実施形態は、バイトコード(またはマシンコード)にコンパイルする前の構文ツリーレベルでのコードの編集を考慮に入れたいずれかのプログラミング言語を用いることができる。
一般に、GROOVYを用いる実施形態は以下の機能を含む。(1)(自動的にまたは手作業で)GROOVYコードに配置されるアノテーション(annotation)、(2)メソッドおよびプロパティアクセスの書直しを行なうAST操作クラス、および(3)実行時にメモリ制約を強化するオプションのQuotaPolicyクラス。3つの部分はすべて、用途(たとえば埋込み使用とスタンドアロン使用と)の違いを考慮に入れるために複数の重複する実現例を有することができる。
一実施形態のアノテーションは、標準的なGROOVY ASTアノテーションである。GROOVY AST操作クラスが呼出されるべきであることを、(コマンドラインまたはGroovyShell.parse()のいずれかによって呼出される)GROOVYコンパイラに通知するために用いられる。たとえば、ある種類のアノテーションをGROOVYスクリプトコードに用いることができる一方、別のものをGROOVYクラスコードに用いることができる。
Groovy AST操作はすべてのループコードを遮断し、それに新しいコードをラップする。これは、ループが何らかの許可されたメモリクォータ(つまりメモリポリシー)を越えたかどうかを判定する役割を担う。同様に、すべての収集クラスおよびストリングスがサイズについて監視され、作成され再びクォータに供されるメモリ集約的なオブジェクトの数を数えるために付加的なチェックが追加され得る。他の方法では無害のオブジェクトの組合せなどの不適当な量のシステムリソースを消費し得る他の動作について、付加的なチェックも追加され得る。AST操作が完了すれば、Java VM内のいずれかの他のクラスと同じように、メモリ不足に対する何らかの保証をもってクラスにアクセスすることができる。
クォータは、システム全体の識別されたプロパティによって、QuotaPolicyクラスの使用によって、スクリプトに関連付けられたメタデータによって、エンドユーザによりスクリプトに配置された変数によって、または何らかの他の方法もしくは方法の組合せによって、判定され得る。
図2は、一実施形態に従って実行時にメモリをスロットリングする際の図1のメモリスロットリングモジュール16の機能のフローチャートである。一実施形態では、図2のフローチャートの機能ならびに以下の図3および図4は、メモリまたは他のコンピュータ読取可能なもしくは有形の媒体に格納されたソフトウェアによって実現され、プロセッサによって実行される。他の実施形態では、当該機能は、(たとえば特定用途向け集積回路(ASIC)、プログラマブルゲートアレイ(PGA)、フィールドプログラマブルゲートアレイ(FPGA)等の使用により)ハードウェア、またはハードウェアおよびソフトウェアのいずれかの組合せによって行なわれ得る。
210において、構文ツリー内のコールが識別される。構文ツリーは、ユーザによって書込まれたかまたは他の方法で提供されたコードに基づいて作成された抽象構文ツリーであり得る。構文ツリーは、コードをコンパイルするプロセスの一部として作成され得る。いくつかのプログラミング言語では、構文ツリーが生成された後でコードを編集することが可能である。たとえば、GROOVYコードをコンパイルすることは、構文ツリーが生成された後であるがバイトコードが生成される前のコードの変更を可能にし得る。1つ以上の構文ツリー操作クラスが呼出されるべきであることを示す1つ以上のアノテーションをユーザがコードに追加している場合がある。メソッドコールを識別することに加え、コンストラクタコールおよび/またはプロパティアクセスコールが識別され得る。メソッドコール、コンストラクタコール、および/またはプロパティアクセスコール(コール)の識別は、構文ツリーを構文解析することによって遂行され得る。
220において、識別された各メソッドコールをメモリ変更済みコールで置換する。メソッドコールに加えて、コンストラクタコールおよび/またはプロパティアクセスコールもメモリ変更済みコールで置換され得る。メモリ変更済みコールは、以下に詳細に開示されるように、メモリポリシーに基づくコールの許可についてのチェックを生じさせる。コールをメモリ変更済みコールで置換することは、コールが実行される前に許可が付与されるかどうかを判定するためにメモリクラスが評価されるように、メモリクラスにコールを関連付けることを含み得る。たとえば、メソッドコールをメモリ変更済みメソッドコールで置換することは、メモリポリシーに対してメソッドコールがチェックされるようにメソッドコールがメモリクラスコールにおいてラップされるかまたは他の方法で変更されることを含み得る。メソッドコールはメモリクラスのパラメータとなり得、したがってメモリ変更済みメソッドコールを作成する。メモリチェックの結果、メソッドコールが許容可能であると識別された場合、メソッドコールのみが実行され得る。そのため、メモリポリシーに基づくメモリクラスは、メソッドコールが行なわれる前にメソッドコールを行なうための許可についてチェックされることになる。コンストラクタコールおよび/またはプロパティアクセスコールについて、同様の関連付けおよび/またはラッピングが生じ得る。
230において、置換に引続いて、1つ以上のメモリ変更済みメソッドコール、メモリ変更済みコンストラクタコール、および/またはメモリ変更済みプロパティアクセスコール(メモリ変更済みコール)を含み得る構文ツリーがコンパイルされる。変更済み構文ツリーのコンパイルの結果、マシンコードに解釈されて実行されるように構成されたバイトコードが作成されることになる。実行されると、各メモリ変更済みコールは、メモリクラスを用いてメモリポリシーに対してチェックされる。メモリ変更済みコールがメモリポリシーに合格しなければ、バイトコードは実行が中止され、例外が生成される。例外は、格納し、かつ/またはユーザに出力することができる。いくつかの実施形態では、違反しているメモリ変更済みコールをスキップし、バイトコードを実行し続けるよう試みることが可能であり得る。
図3は、別の実施形態に従って実行時にメモリをスロットリングする際の図1のメモリスロットリングモジュール16の機能のフローチャートである。
310において、メモリポリシーが受取られる。メモリポリシーは、過度のメモリ使用のために、コンパイルされたコードの実行中に許可されないことがあり、静的解析中に検出され得る一種のメソッドコール、コンストラクタコールおよび/またはプロパティアクセスコールを識別する1つ以上のメモリルールを含むことができる。メモリポリシーは、コードをコンパイルしているエンティティによって提供された、または当該エンティティに提供されたデフォルトメモリポリシーであってもよく、かつ/またはカスタマイズされたメモリポリシーであってもよい。一実施形態のメモリポリシーは、JAVA VMまたはそのライブラリ内の既存のメモリアレイのサイズの知識を使用し、サイズをより大きくすることができるかどうかを判定するか、またはすべての新たなオブジェクト作成を単一のアレイに限定する。メモリサイズの制約は、動的に調整し、変更することができる。
一実施形態のメモリポリシーは、コードをコンパイルして実行するシステムによって格納される。いくつかの実施形態では、メモリポリシーはリモートで格納され得るが、コードをコンパイルして実行するシステムにアクセス可能であり得る。
320において、コンパイルされていないコードが受取られる。このコードは、ユーザがコードを書込むかまたはコードを含む1つ以上のファイルを提供する形態で受取られ得る。いくつかの実施形態では、ユーザは、ユーザコンピュータシステムによって、コンパイルされ実行されるリモートサーバに、ウェブベースのインターフェイスを介してコードを送信し得る。リモートサーバは、コンパイルされていないコードを受取り、それをコンパイルし、ユーザコンピュータシステムからリモートコードを実行し得る。コードは、リモートユーザコンピュータシステムの他に、他のソースから受取られてもよい。
325において、コンパイルされていないコードに1つ以上のメモリ管理アノテーションが付加される。メモリ管理アノテーションは、(GROOVY AST操作クラスなどの)操作クラスが呼出されるべきであることをコンパイラに示す役割を果たす。スクリプトコード(たとえばGROOVYスクリプトコード)についてのアノテーションおよび/またはクラスコード(たとえばGROOVYクラスコード)についてのアノテーションを付加することができる。そのようなメモリ管理アノテーションは、ユーザにより手作業で、または自動的に、付加することができる。GROOVYを用いる実施形態では、メモリ管理アノテーションは、全文変形または局所変形のいずれかとして付加されてもよく、コマンドラインから、またはGroovyShell.parse()などのGROOVYアプリケーションプログラミングインターフェイス(API)からであり得るコンパイルステップでトリガされ得る。いくつかの実施形態では、アノテーションの代わりに、構成スイッチ、プロパティファイルまたは環境変数などの何らかの他のトリガ機構を用いることができる。
330において、コードのコンパイルが開始され、320で受取られたコンパイルされていないコードに基づいて抽象構文ツリーが作成される。ASTは、GROOVYなどのプログラミング言語で書かれた、320で受取られたコンパイルされていないコードのツリー表示である。ASTの各ノードは、一実施形態のコンパイルされていないコードの要素に対応する。GROOVYなどの、いくつかの実施形態について用いられるプログラミング言語は、バイトコード(またはマシンコード)をコンパイルするために構文ツリーが用いられる前に構文ツリーを編集することを許可する。
335において、構文ツリーを構文解析することによって、330で作成された構文ツリー内のコールが識別される。これは、メソッドコール、コンストラクタコールおよび/またはプロパティアクセスコールを含み得る。
340において、310で受取られたメモリポリシーを用いて、構文ツリーの静的解析を行なう。静的解析は、メモリポリシーを破ることになる(つまりメモリポリシー下で許可されない)1つ以上のコンストラクタコール、メソッドコール、および/またはプロパティアクセスコールを識別する。たとえば、大きいことが知られているエクステンシブル・マークアップ・ランゲージ(XML)ファイルを読出す際、メモリ内のドキュメント全体を保持するドキュメント・オブジェクト・モデル(DOM)法を用いることは、スクリプトのコンパイルの不許可をもたらす可能性がある。別の例として、非常に大きな静的ストリングオブジェクトのアレイを作成することも、大きいことが知られているファイルまたはデータベースからそれらのストリングスを読出すことができるように、スクリプトのコンパイルの不許可をもたらす可能性がある。
1つ以上のコンストラクタコール、メソッドコールおよび/またはプロパティアクセスコールが、メモリポリシーに従って許可可能ではない場合、機能は390まで継続する。
390において、340における1つ以上の不合格のコールに基づいて、メモリ例外が生成され、出力される。一実施形態では、320で受取られたコンパイルされていないコードがウェブインターフェイスによってユーザから受取られた場合、ウェブインターフェイスを用いて、当該1つ以上の不合格のコールをユーザに示すことができる。少なくともメモリ例外がコンパイルされていないコードにおいて訂正されるまで、バイトコードへの構文ツリーのコンパイルが阻止され得る。
340における静的解析がメモリポリシーに従っていずれのメモリ例外も識別しなければ、機能は370に続く。370において、335で識別された各メソッドコールについて、メソッドコール、コンストラクタコールおよび/またはプロパティアクセスコールを変更することによってメモリ変更済みメソッドコールが置換される。メソッドコールをメモリ変更済みメソッドコールで置換することは、メソッドコールが実行されることが許可されるかどうかを判定するためにメモリクラスが評価されるように、メモリクラスにメソッドコールを関連付けることを含む。メモリチェックの結果、メソッドコールが許可可能なものとして識別されることになった場合、メソッドコールのみが実行され得る。メソッドコールをメモリ変更済みメソッドコールで置換することは、メソッドコールがメモリクラスコールにおいてラップされることを含み得る。そのため、メモリクラスを用いて、メソッドコールが行なわれる前にメソッドコールを行なう許可についてチェックする。コンストラクタコールおよび/またはプロパティアクセスコールについて、同様の関連付けおよび/またはラッピングが生じ得る。いくつかの実施形態では、構文ツリーが構文解析されるにつれて、335および370の機能がともに行なわれる。たとえば、第1のメソッドコールは、第2のメソッドコールが識別される前に識別され、メモリ変更済みメソッドコールで置換され得る。
380において、370で置換が完了するのに引続いて、1つ以上のメモリ変更済みメソッドコール、メモリ変更済みコンストラクタコール、および/またはメモリ変更済みプロパティアクセスコールを含む構文ツリーがコンパイルされる。変更済み構文ツリーのコンパイルは、仮想マシンによってマシンコードに解釈されて実行されるように構成されたバイトコードをもたらす。いくつかの実施形態では、マシンコードは、コンパイラによって直接に作成されてもよい。
図4は、別の実施形態に係るコンパイル中に変更された構文ツリーを用いて作成されたバイトコードを実行するための図1のメモリスロットリングモジュール16の機能のフローチャートである。バイトコードは、図3の機能を用いて作成された可能性がある。図4の機能は、図1のシステム10とは別個のシステムによっても実行され得る。
410において、バイトコードの第1のメモリ変更済みコールが実行されるように試みられる。コールは、メモリ変更済みメソッドコール、メモリ変更済みコンストラクタアクセスコール、またはメモリ変更済みプロパティアクセスコールであり得る。実行される際、コールを直接実行するのではなく、コールに関連付けられたメモリクラスが用いられてもよい。
420において、メモリポリシーおよび既存のクォータに基づいて、メモリ変更済みコールについてのメモリチェックが行なわれる。コールがメモリポリシーに合格しなければ、機能は430において続く。430において、メモリ例外が生成され、出力される。バイトコードがさらに実行されることが妨げられる場合があり、ユーザに例外が通知される。
420においてコールがメモリポリシーを満たせば、440においてコールが実行される。したがって、図3の370においてメモリ変更済みコールを作成するために第1のコールが用いられた場合、メソッドコールがメモリポリシーと一致していれば、440において第1のコールが実行されることになる。440の実行が成功した場合に引続いて、機能は410に続き、別のメモリ変更済みコールが実行される。これは、バイトコードが完全に実行されるまで続くことになる。
開示されているように、実施形態はコンパイルコールを遮り、コンパイル中にメモリポリシーに基づいてコールを許可するか、またはコールを不許可とする。メモリ内オブジェクトの意図しない制御不能な作成を阻止することによって、実施形態は、JAVA VMを有するGROOVYなどの、マルチユーザサーバ上で実行されるスクリプトをエンドユーザが入力することを可能にするシステムの安定性および性能を著しく向上させることができる。実施形態はJAVA VMへの変更に依存しないため、現在実現されているJAVA VMで用いることができる。
いくつかの実施形態が本明細書に具体的に例示され、かつ/または説明される。しかしながら、開示した実施形態の変更および変形例は、発明の精神および意図される範囲から逸脱することなく、上記の教示によって添付の請求項の範囲内に包含されることが認識されるであろう。

Claims (21)

  1. 命令が格納されたコンピュータ読取可能媒体であって、前記命令は、プロセッサによって実行されると、前記プロセッサにメモリ管理ポリシーを実行時に実現させ、前記実現は、
    ソフトウェアコードのコンパイルの開始に応答して構文ツリーを受取ることと、
    前記構文ツリー内の複数のコールを識別することと、
    複数のメモリ変更済みコールを作成するために、前記複数のコールの各々を対応するメモリ変更済みコールにより変更することとを含み、各メモリ変更済みコールはメモリ管理クラスとリンクされ、前記変更することは、前記ソフトウェアコードのコンパイル中に生じ、さらに、
    前記複数のコールの各々の変更に引続いて、前記複数のメモリ変更済みコールをコンパイルしてバイトコードを生成することを含む、コンピュータ読取可能媒体。
  2. 前記複数のメモリ変更済みコールをコンパイルすることは、
    メモリ変更済みコールを実行することと、
    前記メモリ変更済みコールがメモリポリシーを満たすかどうかを判定することと、
    前記メモリ変更済みコールがメモリポリシーを満たさない場合、メモリ例外を生成することとを含む、請求項1に記載のコンピュータ読取可能媒体。
  3. 前記実現はさらに、前記メモリ変更済みコールがメモリポリシーを満たさない場合、前記バイトコードの生成を停止させることを含む、請求項2に記載のコンピュータ読取可能媒体。
  4. 前記変更することは、コンパイルされていないソフトウェアコードに1つ以上のアノテーションを付加することを含み、前記アノテーションは、操作クラスが呼出されるべきであることを示す、請求項1に記載のコンピュータ読取可能媒体。
  5. 前記コンパイルされていないコードは、GROOVY言語として書込まれる、請求項1に記載のコンピュータ読取可能媒体。
  6. 前記バイトコードは、JAVA仮想マシンによってマシンコードに変換される、請求項1に記載のコンピュータ読取可能媒体。
  7. 前記メモリポリシーは、JAVAメモリ制約に基づく、請求項2に記載のコンピュータ読取可能媒体。
  8. 前記ソフトウェアコードは、リモートの相手から受取られる、請求項1に記載のコンピュータ読取可能媒体。
  9. メモリ管理ポリシーを実行時に実現する方法であって、当該方法は、
    ソフトウェアコードのコンパイルの開始に応答して構文ツリーを受取ることと、
    前記構文ツリー内の複数のコールを識別することと、
    複数のメモリ変更済みコールを作成するために、前記複数のコールの各々を対応するメモリ変更済みコールにより変更することとを含み、各メモリ変更済みコールはメモリ管理クラスとリンクされ、前記変更することは、前記ソフトウェアコードのコンパイル中に生じ、さらに、
    前記複数のコールの各々の変更に引続いて、前記複数のメモリ変更済みコールをコンパイルしてバイトコードを生成することを含む、方法。
  10. 前記複数のメモリ変更済みコールをコンパイルすることは、
    メモリ変更済みコールを実行することと、
    前記メモリ変更済みコールがメモリポリシーを満たすかどうかを判定することと、
    前記メモリ変更済みコールがメモリポリシーを満たさない場合、メモリ例外を生成することとを含む、請求項9に記載の方法。
  11. 前記実現はさらに、前記メモリ変更済みコールがメモリポリシーを満たさない場合、前記バイトコードの生成を停止させることを含む、請求項9に記載の方法。
  12. 前記変更することは、コンパイルされていないソフトウェアコードに1つ以上のアノテーションを付加することを含み、前記アノテーションは、操作クラスが呼出されるべきであることを示す、請求項9に記載の方法。
  13. 前記コンパイルされていないコードは、GROOVY言語として書込まれる、請求項9に記載の方法。
  14. 前記バイトコードは、JAVA仮想マシンによってマシンコードに変換される、請求項9に記載の方法。
  15. 前記メモリポリシーは、JAVAメモリ制約に基づく、請求項10に記載の方法。
  16. ソフトウェアコンパイラであって、
    プロセッサと、
    前記プロセッサに結合され、前記プロセッサによって実行されるとモジュールを生成する命令を格納するメモリ装置とを備え、前記モジュールは、
    ソフトウェアコードのコンパイルの開始に応答して構文ツリーを受取り、前記構文ツリー内の複数のコールを識別する識別モジュールと、
    複数のメモリ変更済みコールを作成するために前記複数のコールの各々を対応するメモリ変更済みコールにより変更する変更モジュールとを含み、各メモリ変更済みコールはメモリ管理クラスとリンクされ、前記変更は、前記ソフトウェアコードのコンパイル中に生じ、さらに、
    前記複数のコールの各々の変更に引続いて、前記複数のメモリ変更済みコールをコンパイルしてバイトコードを生成するコンパイラモジュールを含む、ソフトウェアコンパイラ。
  17. 前記複数のメモリ変更済みコールをコンパイルすることは、
    メモリ変更済みコールを実行することと、
    前記メモリ変更済みコールがメモリポリシーを満たすかどうかを判定することと、
    前記メモリ変更済みコールがメモリポリシーを満たさない場合、メモリ例外を生成することとを含む、請求項16に記載のソフトウェアコンパイラ。
  18. 前記実現はさらに、前記メモリ変更済みコールがメモリポリシーを満たさない場合、前記バイトコードの生成を停止させることを含む、請求項17に記載のソフトウェアコンパイラ。
  19. 前記変更することは、コンパイルされていないソフトウェアコードに1つ以上のアノテーションを付加することを含み、前記アノテーションは、操作クラスが呼出されるべきであることを示す、請求項16に記載のソフトウェアコンパイラ。
  20. 前記コンパイルされていないコードは、GROOVY言語として書込まれる、請求項16に記載のソフトウェアコンパイラ。
  21. 前記バイトコードは、JAVA仮想マシンによってマシンコードに変換される、請求項16に記載のソフトウェアコンパイラ。
JP2016534581A 2013-08-15 2014-06-30 ランタイムメモリスロットリング Active JP6505700B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361866223P 2013-08-15 2013-08-15
US61/866,223 2013-08-15
PCT/US2014/044827 WO2015023366A1 (en) 2013-08-15 2014-06-30 Runtime memory throttling

Publications (3)

Publication Number Publication Date
JP2016528638A true JP2016528638A (ja) 2016-09-15
JP2016528638A5 JP2016528638A5 (ja) 2017-08-03
JP6505700B2 JP6505700B2 (ja) 2019-04-24

Family

ID=51257584

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016534581A Active JP6505700B2 (ja) 2013-08-15 2014-06-30 ランタイムメモリスロットリング

Country Status (5)

Country Link
US (1) US9213530B2 (ja)
EP (1) EP3033674B1 (ja)
JP (1) JP6505700B2 (ja)
CN (1) CN105393216B (ja)
WO (1) WO2015023366A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110928804B (zh) * 2018-09-20 2024-05-28 斑马智行网络(香港)有限公司 垃圾回收的优化方法、装置、终端设备及机器可读介质
JP7473145B2 (ja) * 2019-05-31 2024-04-23 コネクトフリー株式会社 ソフトウェア開発装置およびソフトウェア開発プログラム

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000242551A (ja) * 1999-02-10 2000-09-08 Internatl Business Mach Corp <Ibm> メモリ管理のための方法および装置
JP2002522844A (ja) * 1998-08-13 2002-07-23 サン・マイクロシステムズ・インコーポレーテッド バーチャル・マシン環境でネイティブ・コードを変換し、実行する方法および装置
JP2009110213A (ja) * 2007-10-30 2009-05-21 Fujitsu Ltd 制御プログラム及び方法並びにコンピュータ
US20130086625A1 (en) * 2011-09-29 2013-04-04 Oracle International Corporation Enforcing security rules at runtime

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6516416B2 (en) 1997-06-11 2003-02-04 Prism Resources Subscription access system for use with an untrusted network
US7290288B2 (en) 1997-06-11 2007-10-30 Prism Technologies, L.L.C. Method and system for controlling access, by an authentication server, to protected computer resources provided via an internet protocol network
US20080243970A1 (en) 2007-03-30 2008-10-02 Sap Ag Method and system for providing loitering trace in virtual machines
US8374949B2 (en) * 2008-09-26 2013-02-12 Yahoo! Inc. Integration of open advertisements with e-commerce activities
US20110029822A1 (en) 2009-08-03 2011-02-03 Sap Ag Tracking of java objects during request processing
EP2400420A1 (en) * 2010-06-28 2011-12-28 Thomson Licensing Method, system and secure processor for executing a software application
US9183113B2 (en) 2011-09-29 2015-11-10 Oracle International Corporation Debugging analysis in running multi-user systems
US9696974B2 (en) * 2013-03-13 2017-07-04 Microsoft Technology Licensing, Llc. Graph-based model for type systems

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002522844A (ja) * 1998-08-13 2002-07-23 サン・マイクロシステムズ・インコーポレーテッド バーチャル・マシン環境でネイティブ・コードを変換し、実行する方法および装置
JP2000242551A (ja) * 1999-02-10 2000-09-08 Internatl Business Mach Corp <Ibm> メモリ管理のための方法および装置
JP2009110213A (ja) * 2007-10-30 2009-05-21 Fujitsu Ltd 制御プログラム及び方法並びにコンピュータ
US20130086625A1 (en) * 2011-09-29 2013-04-04 Oracle International Corporation Enforcing security rules at runtime

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
中島 震 他: "「リファクタリングの正しさのESC/Java2による形式検証」", 電子情報通信学会技術研究報告, vol. 第105巻 第596号, JPN6018026591, 26 January 2006 (2006-01-26), JP, pages 7 - 12, ISSN: 0003877103 *

Also Published As

Publication number Publication date
EP3033674A1 (en) 2016-06-22
CN105393216B (zh) 2018-08-31
JP6505700B2 (ja) 2019-04-24
WO2015023366A1 (en) 2015-02-19
US9213530B2 (en) 2015-12-15
US20150052506A1 (en) 2015-02-19
CN105393216A (zh) 2016-03-09
EP3033674B1 (en) 2019-07-24

Similar Documents

Publication Publication Date Title
US8813049B2 (en) Type inference of partially-specified parameterized types
Appeltauer et al. ContextJ: Context-oriented programming with Java
US8954939B2 (en) Extending a development environment
KR101786156B1 (ko) 사용자 정의 타입을 위한 컴파일 타임 경계 검사 기법
US20080120604A1 (en) Methods, Systems, And Computer Program Products For Providing Program Runtime Data Validation
US8141035B2 (en) Method for accessing internal states of objects in object oriented programming
US20040268301A1 (en) Adding new compiler methods to an integrated development environment
US10296313B2 (en) Safely consuming dynamically-typed code from a statically-typed programming language
Canino et al. Proactive and adaptive energy-aware programming with mixed typechecking
Toro et al. Customizable gradual polymorphic effects for Scala
Niephaus et al. Graalsqueak: A fast smalltalk bytecode interpreter written in an ast interpreter framework
Spoto A java framework for smart contracts
US20110271248A1 (en) Converting controls into source code
JP6505700B2 (ja) ランタイムメモリスロットリング
Denker Sub-method Structural and Behavioral Reflection
Valliappan et al. Typing the wild in Erlang
Madsen et al. Using supplementary properties to reduce the need for documentation
Moreau et al. Resource aware programming
Seo et al. InvisiType: Object-Oriented Security Policies.
Wada et al. Design and implementation of the matilda distributed uml virtual machine
Husák et al. PeachPie: Mature PHP to CLI compiler
Faes et al. Parallel Roles for Practical Deterministic Parallel Programming
Pool et al. TruffleReloader: A low-overhead language-neutral reloader
Hlopko et al. On the integration of Smalltalk and Java
Papoulias et al. Reifying the reflectogram: Towards explicit control for implicit reflection

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170626

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170626

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180629

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180717

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180827

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180911

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20181211

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190128

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190327

R150 Certificate of patent or registration of utility model

Ref document number: 6505700

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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