JP2000293379A - 呼び出しを識別する方法、システムおよび記憶媒体 - Google Patents

呼び出しを識別する方法、システムおよび記憶媒体

Info

Publication number
JP2000293379A
JP2000293379A JP2000068025A JP2000068025A JP2000293379A JP 2000293379 A JP2000293379 A JP 2000293379A JP 2000068025 A JP2000068025 A JP 2000068025A JP 2000068025 A JP2000068025 A JP 2000068025A JP 2000293379 A JP2000293379 A JP 2000293379A
Authority
JP
Japan
Prior art keywords
package
class
call
guaranteed
belong
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.)
Pending
Application number
JP2000068025A
Other languages
English (en)
Inventor
Nava Aizikowitz
アイジコビッツ・ナヴァ
Vitaly Feldman
フェルドマン・ヴィタリ
Ayal Zaks
ザックス・アヤル
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 JP2000293379A publication Critical patent/JP2000293379A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • G06F9/4491Optimising based on receiver type

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)
  • Stored Programmes (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

(57)【要約】 【課題】 Javaパッケージにおいて有するターゲッ
トがそのパッケージに属することが保証されている呼び
出しを識別する方法およびシステムを提供すること。 【解決手段】 この方法によれば、パッケージ内のそれ
ぞれのコンポーネントの継承グラフおよびアクセス許可
が決定され、その両方を、このパッケージが封印され署
名されるという知識とあいまって使用し、呼び出しのす
べてのターゲットがこのパッケージに属することが保証
されているかどうかを判定する。本発明による呼び出し
の識別は、このパッケージが封印され署名されるとき
か、またはその後に別の段階として実行することができ
るので、よりよいコンパイラ最適化が可能になる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、Javaプログラ
ム・モジュールのプログラム解析および最適化に関す
る。
【0002】
【従来の技術】プログラムの実行時間は、コードおよび
コンパイラの最適化を使用することによって大幅に削減
することができ、それによってハードウェアのリソース
がよりよく活用される。短い手順を多数含むプログラム
では、多数のオブジェクト指向プログラムと同様に、効
率的なコードを得るためには手順間最適化が必要であ
る。最も重要な手順間最適化はインライン化であり、こ
れは呼び出しのオーバーヘッドを低減し、最適化の機会
を増すことによって性能を向上させることができる。し
かし、手順間最適化は、オブジェクト指向プログラムの
仮想呼び出しによって制限される。したがって、仮想呼
び出しの潜在的なターゲットを識別する能力は、しばし
ば「呼び出し仮想化解除」と呼ばれるが、このようなプ
ログラムにとって非常に重要であり、近年大いに注目さ
れてきた。
【0003】Javaプログラミング言語および実行時
環境は、仮想化解除のための新しい課題を課している。
実際に、Javaにおいて仮想呼び出しの可能な全ター
ゲットをあらかじめ識別することは、不可能になること
さえある。追加の予期せぬターゲットを含む新しいクラ
スが、いかなるときにもロードされる可能性がある。仮
想呼び出しの可能なターゲットを完全に決定するために
は、高度なタイプの解析が必要になることがある。潜在
的ターゲットが何であるかが確実でないと、手順間最適
化を実行する能力が大幅に制限される。このような最適
化には、動的にロード可能なクラスおよびインタフェー
スのすべてを指定するためにユーザに依拠するか、ある
いは実際のターゲットが何であるかを繰り返し検査し予
期せぬターゲットに対するデフォルト・アクションを用
意するかのいずれかが必要となる。そうしないと、最適
化が旧式になる危険があり、その場合にはこの最適化を
取り消すための特殊な機構が必要となる。このような機
構はDavid Griswold著「The JavaTM HotSpotTM Virtual
Machine Architecture」Sun MicroSystems Inc.、19
98年3月刊に記載されており、ホワイト・ペーパーと
してhttp://java.sun.com:81/products/hotspot/whitep
aper.htmlから入手できる。
【0004】C++など従来のオブジェクト指向言語で
は、仮想呼び出しの可能ターゲットのセットを容易に決
定することができ、あるいは少なくとも控えめに近似す
ることができる。というのは、プログラムによっておそ
らく使用できるすべてのクラスが、コンパイル時に修復
され、知られるからである。所与のメソッドの呼び出し
は、そのメソッドのいかなるオーバーライド実装も潜在
的にターゲットにすることができる。したがって、呼び
出しのターゲットの単純な近似は、呼び出されたメソッ
ドのすべてのオーバーライド実装のセットである。呼び
出されたクラスをルートとする継承ツリーを走査するこ
とによって、このセットを効率的に構築することができ
る。仮想呼び出しの可能ターゲットのセットを精巧化し
て、すべてのオーバーライド実装のセットのサブセット
を作成するために、近年さまざまな技術が開発されてき
た。プログラム実行中に決して呼び出されないように保
証された「デッド・メソッド実装」を、潜在的ターゲッ
ト候補から除外するために、活性(liveness)解析を使
用することが知られている。このような技術はすべて、
実行時に参照することが可能であり、解析時に修復およ
び使用可能である、すべての関連クラスを有することに
依拠している。
【0005】しかし、Javaプログラムでは、どのク
ラスが実際に関与するかをあらかじめ知ることは、一般
に不可能である。特定のクラス・ファイルは実行時中に
のみ位置指定およびロードされ、このときにクラスが初
めて参照される。このときまで、クラス・ファイル自体
または他のパラメータ(CLASSPATH環境変数な
ど)に加えられたいかなる変更も、ロードされるクラス
に影響を与える可能性がある。この動的な挙動によっ
て、クラス間解析を実行する能力、特に仮想呼び出しの
可能ターゲットを決定する能力が制限される。Java
と他のオブジェクト指向言語の間には、仮想呼び出しの
潜在的ターゲットに関してもう1つの違いがある。Ja
vaでは(他の言語とは異なり)、仮想呼び出しが、そ
のクラスが呼び出されたインタフェースを実装しない。
オーバーライド実装に到達することが可能である。しか
し、Javaメソッドを含むクラスまたはインタフェー
スのサブクラスを走査し、時にはこのようなサブクラス
のスーパークラスを検査することによって、このメソッ
ドのすべてのオーバーライド実装を発見することもなお
可能である。
【0006】現在、Javaのこの動的挙性に対処し、
しかもクラス間解析および最適化を可能するために、2
つの主な手法が使用されている。一方の手法は、すべて
の関連クラスがユーザによって供給されると仮定し、従
来の静的技術に戻ることである。このような手法は、In
stantiations, Inc.によって同社のプログラムJOV
TM(http://www.instantiations.com/jove/joverepor
t.htm)に採用されており、これは「封印」Javaア
プリケーション全体を解析およびコンパイルするもので
ある。
【0007】この手法の主な欠点は、予期せぬクラスま
たはインタフェースを実行時に動的にロードすることが
できる(動的な)アプリケーションに適用されないこと
である。
【0008】第2の手法は、新しいクラスが(実行時
に)現れる可能性があると仮定し、旧式の解析を検出し
てこのような解析に基づく最適化を「取り消す」ための
機構を用意することである。最適化されたコードが入力
された後に最適化を「取り消す」ことは通常は不可能で
あるため、コードをあるメソッドにインライン化すると
きに予期せぬターゲットを処理するための、デフォルト
・アクションを提供しなければならないことに留意され
たい。このような手法は、上述で参照したHotspotによ
って使用されている。この手法の主な欠点は、この追加
の機構によって、また時には予期せぬターゲットを検出
し処理する必要性があることによって、実行時オーバー
ヘッドが増すことである。
【0009】初期最適化が自己完結的であり、したがっ
て実行時中に旧式にされないようにすることによって、
このような事後コンパイルを避けることが好ましい。し
かし、これが達成できるのは特定の呼び出しが「封印呼
び出し」として適切に識別できる場合だけであり、この
「封印呼び出し」の潜在的ターゲットのセットは、実行
時の前にも、完全かつ明示的に決定できる。
【0010】
【発明が解決しようとする課題】したがって、本発明の
一目的は、Javaパッケージにおいてそのターゲット
が同じパッケージに属することが保証されている呼び出
しを識別する方法を提供することである。
【0011】
【課題を解決するための手段】本発明によれば、Jav
a封印パッケージにおいてそのターゲットが前記パッケ
ージに属することが保証されている呼び出しを識別する
方法が提供される。この方法は、次のステップを含む。
【0012】(1)パッケージが封印され署名されるこ
とを検証するステップと、(2)前記パッケージのクラ
スおよびインタフェースのクラス階層グラフを得るステ
ップと、(3)前記パッケージ内のそれぞれのコンポー
ネントのアクセス許可を得るステップと、(4)呼び出
しのすべてのターゲットが前記パッケージに属すること
が保証されているかどうかを判定するために、クラス階
層グラフおよびアクセス許可をこのパッケージが封印さ
れ署名されるという知識と組み合わせて使用するステッ
プ。
【0013】本発明は、Java Development Kitのバージ
ョン1.2(JDK 1.2)のパッケージを封印する
ことのできる機能を活用する。この機能は、本来、より
高いセキュリティを提供するものであり、本発明では、
呼び出しが封印され署名されたJavaパッケージの内
部に現れ、すべてのターゲットがそのパッケージに属す
ることが保証されていると判定される場合に、その呼び
出しをいわゆる「封印呼び出し」として識別するために
この機能を使用する。
【0014】封印呼び出しおよびその潜在的ターゲット
を識別することによって、積極的な(aggressive)手順
間(パッケージ内)最適化が容易になる。特に、封印呼
び出しが潜在的ターゲットを1つしか有していない場
合、この呼び出しを安全にインライン化することができ
る。このような最適化は、Just-In-Time(JIT)コン
パイラ内で、標準のコンパイル時(実行時前)コンパイ
ラ内で、またはバイト・コード変換段階として行うこと
ができる。
【0015】本発明によれば、プログラム全体の仮定ま
たは制限に依拠せず、旧式になる恐れや実行時オーバー
ヘッドを加える恐れがなく、静的解析を安全に適用する
ことができる、あるシナリオが識別される。本発明によ
る方法を、それが適用可能な場合に活用し、他の場合に
は従来の手法のいずれかを使用することが可能である。
【0016】
【発明の実施の形態】序論として、Java Development K
itのバージョン1.2(JDK 1.2)では新しい機
能が導入され、JARファイル内にあるJavaパッケ
ージを「封印」することが可能になったことに留意され
たい。パッケージが封印される場合、このパッケージ内
で定義されたすべてのクラスおよびインタフェースは、
同じJARファイルから生じなければならず、そうでな
い場合は例外(「java.lang.SecurityException」)が
送出される。封印されたJavaパッケージを、本明細
書および特許請求の範囲中では「封印パッケージ」と呼
ぶ。JARファイルを封印することも可能であり、この
場合は、特に封印されていないものと宣言されない限
り、JARファイル内のあらゆるパッケージが封印され
ていることを意味する。JARファイル内部でパッケー
ジが封印されているとき、いかなるアプリケーション
も、このJARファイルからすべての関連クラスおよび
インタフェースをロードする(またはどれもロードしな
い)。パッケージを封印する本来の動機は、セキュリテ
ィの維持に役立てることであった。しかし、以下で分か
るように、本発明は、クラスをロードする自由を制限す
るために、Javaのこの機能を活用する。
【0017】クラス・ファイルのセットをまとめてグル
ープ化することは、クラス間解析にとって重要である。
このような解析の持続性を確保するために、パッケージ
自体および封印において、既存のクラスの修正および削
除、追加クラスの導入などの変更を検出することが可能
でなければならない。これは、JARファイル署名(J
DK 1.2でも使用可能)の形式で提供される。Ja
vaプログラムのクラスが与えられると、呼び出しの現
在可能なすべてのターゲットが1つの封印パッケージ内
にあるかどうかを、検証することが可能である。そうで
ない場合は、いくつかの同じターゲットが実行時までに
変化する可能性がある。しかし、すべての現行ターゲッ
トが1つの封印パッケージに属する場合でも、追加のタ
ーゲットが、他のパッケージから実行時前または実行時
に現れることが、なお可能なことがある。したがって、
場合によっては呼び出しが異なるパッケージのメソッド
をターゲットにすることができないこと、すなわち、呼
び出しが封印呼び出しであることを保証し、実行時に現
行ターゲットの変化および追加ターゲットが現れないよ
うにしなければならない。クラス、インタフェースおよ
びメソッドのデフォルト(パッケージ)修飾子によって
課せられたアクセス制限を使用して、ターゲットのセッ
トがパッケージ外部のクラスによって増補されないよう
にすることができる。
【0018】デフォルト(パッケージ化)修飾子を有す
るクラス、インタフェースまたはメソッドには、同じパ
ッケージ内のクラス、インタフェースおよびメソッドの
みがアクセス可能である。デフォルト(パッケージ化)
修飾子を有するクラス、インタフェースまたはメソッド
を、それぞれ「パッケージ化」クラス、インタフェース
またはメソッドと呼ぶ。パッケージ化メソッドは、異な
るパッケージのメソッドによって直接オーバーライドす
ることができず、publicまたはprotectedメソッドのみ
がアクセス可能であり、パッケージ外部から直接オーバ
ーライドすることができる。しかし、パッケージ化メソ
ッドは、同じパッケージ内のpublicまたはprotectedメ
ソッドによって(直接または間接的に)オーバーライド
することができ、次いで他のいずれかのパッケージのメ
ソッドによって(間接的に)オーバーライドすることが
できる。したがって、パッケージ化メソッドがそのパッ
ケージ内のpublic またはprotectedメソッドによってオ
ーバーライドされないことを検証し、外部ターゲットが
存在できないという結論を出さなければならない。
【0019】さらに、パッケージ化(すなわち、非publ
ic)クラスまたはインタフェースに属するメソッドは、
異なるパッケージのメソッドによって直接オーバーライ
ドすることができず、パッケージ外部からは、publicク
ラスおよびインタフェースのみがアクセス可能である
(かつ、それらのメソッドがオーバライド可能であ
る)。この場合も、パッケージ内部からパッケージ化ク
ラスを拡張するpublicクラスを使用して、パッケージ化
クラスのメソッドを「持ち出す(smuggle)」ことが可
能である。このようなパブリック・(サブ)クラスは、
元のメソッドをオーバーライドできる、パッケージ外部
の別のクラスによって拡張することができる。パッケー
ジ化インタフェースのメソッドも、そのインタフェース
を実装するが、パッケージ外部にあるスーパークラスか
らこのメソッドのための実装を継承するクラスを使用し
てそのパッケージから「持ち出す」ことができる。もう
1つの修飾子が、Javaメソッドをオーバーライドす
る機能を制限する役割を果たす。すなわちfinal修飾子
はメソッドのオーバーライドまたはクラスの拡張を厳密
に禁じる。
【0020】図1および図2は、本発明による主な動作
ステップを要約する流れ図である。すなわち、解析され
る各パッケージは、それが封印され署名されていること
を確定するために検証される。そうである場合、次い
で、図2に示すように、このパッケージのクラス階層グ
ラフ(CHG)が構築され、パッケージ・コンポーネン
トのそれぞれのアクセス許可が決定される。これらを、
パッケージが封印され署名されることが知られていると
いう事実と共に使用して、このパッケージ内の呼び出し
のすべてのターゲットがそのパッケージに属することが
保証されているかどうかが判定される。このようにし
て、この呼び出しが「封印」であると判定されると、こ
の知識を直ちに使用することができ、たとえば、コンパ
イラ最適化が可能となる。あるいは、これを後で独立に
使用するために、パッケージ外部で別々に記憶すること
もできる。
【0021】パッケージが封印され署名されていないと
判定された場合、呼び出しが「封印」されているかどう
かについての結果、および封印呼び出しの可能ターゲッ
トが、このパッケージ内に含まれるかどうかを判定する
ために検査が行われる。そうでない場合、パッケージが
封印され署名され、図2に示す方法が上述のように実行
される。一方、この結果がこのパッケージ内に含まれる
場合、図2に示す方法が上述のように実行され、呼び出
しが「封印」されているかどうかについての結果および
封印呼び出しの可能ターゲットが、パッケージ内に記憶
される。次いで、パッケージが封印され署名される。
【0022】CHGが、アクセス制限を解析するのと同
じアルゴリズムによって固有ステップとして導出可能で
あり、あるいは、CHGを外部で構築してアルゴリズム
に供給することが可能であることに留意されたい。望む
なら、同じトークンによって、アクセス許可も外部で導
出することができる。このアルゴリズムにはこれらのデ
ータが必要であるが、これらが外部で導出されるかまた
はアルゴリズム自体の一部として導出されるかには違い
がない。
【0023】図3は、ルート・インタフェースI1、I2
およびI4、およびルート・クラスC0を有する、一般に
10で示す封印パッケージの継承グラフを図で示すもの
である。封印パッケージ内の呼び出しは、クラスC2
カプセル化されたメソッドm2を参照する。メソッドm2
は、共に封印パッケージ10内のクラスC2の直接の子
孫であるクラスC6およびC8によってオーバーライドさ
れることが分かるであろう。クラスC2は、パッケージ
化され、メソッドm2をパッケージ化されたものとして
宣言すると仮定される。したがって、パッケージ10の
外部のクラスはクラスC2を拡張したり、クラスC2のメ
ソッドm2を直接オーバーライドすることはできない。
クラスC6は、メソッドm2をpublicかつ非finalと宣言
すると仮定され、クラスC8は、メソッドm2をパッケー
ジ化されたものと宣言し、両方のクラスがpublicかつ非
finalであると仮定される。したがって、クラスC8は、
2をパッケージ化されたものと宣言するので、封印パ
ッケージ10の外部にあるクラスC9にメソッドm2を渡
すことができない。しかし、クラスC7など、封印パッ
ケージ10の外部にあるクラスC6の子孫も、クラスC6
がpublicでありm2をpublicかつ非finalと宣言するの
で、クラスC2のメソッドm2をオーバーライドすること
ができる。つまり、クラスC2のメソッドm2の呼び出し
のターゲットは、封印パッケージの外部のクラスC7
関連付けることができるので、封印パッケージ10に属
することが保証できない。
【0024】したがって、パッケージ10が封印され署
名されていることが確定されたとすると、CHGの解
析、およびパッケージ内のクラスおよびインタフェース
のアクセス許可によって、呼び出しへのすべてのターゲ
ットが封印パッケージに属することが保証できるかどう
かについての判定が提供される。そうである場合、呼び
出しが「封印」され、パッケージを安全に最適化するこ
とができる。そうでない場合、パッケージ外部のメソッ
ドが、実行時に、このパッケージ内部でカプセル化され
たメソッドに取って代わる可能性がある。
【0025】図4は、メソッドm2を宣言するルート・
インタフェースI2を有する、一般に20で示す封印パ
ッケージの継承ツリーを図で示すものである。メソッド
2はクラスC2内で実装されるように図示されている
が、このクラスはI2の子孫ではない。しかし、I2::
2はクラスC3によって実装され、クラスC3はI2の継
承ツリーの外部にあるクラスC2からm2を継承する。し
たがって、C3を介してC2から外部のメソッドをパッケ
ージ内に「持ち込む」ことができる。このようにして、
スーパークラスを介して持ち込みを行うことが可能なの
で、C2::m2がパッケージ外部にある場合には、メソ
ッドI2::m2への呼び出しの可能ターゲットを制御す
ることができない。
【0026】同様に、実行時にI2::m2への呼び出し
をクラスC3、C4、C5またはC6に分解することができ
る場合、クラスC3、C4、C5またはC6のそれぞれが抽
象であるか、それともそれ自体のメソッドm2を有して
いるかを判定しなければならず、このような場合は、I
2::m2への呼び出しを「封印」と宣言することができ
る。抽象である場合は、実行時にそれ自体が実ターゲッ
トになることができない。それ自体のメソッドm2を有
する場合は、明らかに、パッケージ外部からのC2::
2の代わりに、そのメソッドが呼び出される。
【0027】図5は、ルート・クラスC1およびC4を有
し、クラスC1はメソッドm2をpublicかつ非finalと宣
言する、一般に30で示す封印パッケージの2つの継承
ツリーを図で示すものである。クラスC3は、C1のpubl
icかつ非finalの子孫である。同じパッケージにおい
て、クラスC4およびC6は、パッケージ30内のクラス
3とは直接の継承関係を有していないが、これらは、
同じパッケージ30に属していない中間クラスC7を介
してC3のメソッドm2をオーバーライドすることができ
るので、無視することができない。したがって、クラス
d内で宣言されたメソッドmが、クラスdと明らかな継
承関係を有していない同じ封印パッケージ内の別のクラ
スeによってオーバーライドされる可能性があり、この
ような場合、e::mがパッケージ外部からオーバーラ
イドできる場合には、d::mへの呼び出しを「封印」
と宣言することはできない。
【0028】図6ないし図10は、基本アルゴリズムの
詳細を示す図であり、封印呼び出しを識別するために、
クラスおよびメンバのアクセス許可およびfinal修飾子
を考慮するものである。このアルゴリズムのいくつかの
特徴は、上述の図3、図4および図5にも図示されてい
る。
【0029】基本アルゴリズム クラスまたはインタフェースcのメソッドm(c::m
と示す)の呼び出しが与えられ、この呼び出しが封印呼
び出しであるかそうでないかを判定したいと仮定する。
cを含むパッケージが与えられると、そのクラスおよび
インタフェースを解析し、階層継承関係をクラス階層グ
ラフ(CHG)または継承グラフの形式で記録すること
ができる。c::mへの所与の呼び出しが封印呼び出し
であるかどうかを判定するために、CHGに基づいて、
メソッドc::mのすべてのオーバーライドの標準探索
を機能強化することができる。
【0030】潜在的にメソッドmをオーバーライドでき
る(またはスーパークラスからそのようなオーバーライ
ド実装を継承する)cのサブクラスはすべて、この探索
で走査される。これらのサブクラスはすべて、直接また
は間接的にクラスcを拡張する(またはインタフェース
cを実装する)クラスdであり、クラスがメソッドmを
finalとして宣言する場合はそのすべてのサブクラスが
除外されるという例外がある。publicで非finalなクラ
スであり、メソッドmをpublicかつ非finalとして再宣
言するか、スーパークラスからこのような宣言を継承す
るクラスdに出会った場合、探索を終了することができ
る。−c::mへの元の呼び出しは、封印呼び出しでは
ない。というのは、クラスdが別のパッケージのあるク
ラスeによって拡張でき、eがc::mをオーバーライ
ドすることができるからである。そうでない場合は、
c::mへの呼び出しが封印呼び出しである。
【0031】図6ないし図10は、c::mへの呼び出
しが封印呼び出しであるかどうかを判定するアルゴリズ
ムの実装を示す図である。図8および図9は、cがクラ
スである場合を扱い、図10は、cがインタフェースで
ある場合を扱う。以下は、PublicNonFinalSubclassFoun
d定数に関するコードの説明である。
【0032】パッケージのクラスとインタフェースの間
の直接継承を判定するには、これらのクラスおよびイン
タフェースの内部を見れば十分である。しかし、間接継
承を検出するには、他のクラスを検査する必要があるこ
とがある。たとえば、あるパッケージのクラスは別のパ
ッケージのクラスを拡張することができ、そのクラスは
最初のパッケージの別のクラスを拡張することができ
る。したがって、前のクラスは(間接的に)後のクラス
を拡張し、両方のクラスが同じパッケージに属するが、
パッケージ内部を見るだけでは可視の継承関係はない。
この状態を、図5のパッケージ30で示す。継承関係を
完全に判定するには、異なるパッケージに属する中間ク
ラス(図5のクラスC7に対応)も検査しなければなら
ない。それにもかかわらず、なおアルゴリズムを1つの
パッケージの内容にのみ基づくものにしたいものであ
る。これは封印され署名されるので、他の情報とは異な
り、変更を受けない。
【0033】このようなパッケージ間間接継承は、その
パッケージからメソッドを「持ち出す」助けとすること
もできる。publicクラスのパッケージ化メソッドは、同
じパッケージ内の間接サブクラスによって(パッケージ
間継承を通じて)オーバーライドすることができ、サブ
クラスはこのメソッドをpublicと宣言できるので、外部
のサブクラスがこれをオーバーライドすることが可能に
なる。しかし、これは唯一の重要なケースである。別の
パッケージのクラスによって拡張可能にするために、こ
のクラスはpublicでなければならず、メソッドをパッケ
ージ化しなければならない。そうでないとメソッドを直
接持ち出すことができるからである。インタフェースの
メソッドはすべてpublicなので、このように「持ち出
す」ことができない。
【0034】(パッケージの内容にのみ基づく)パッケ
ージのCHGは、パッケージ間継承によるアークを含ま
ない。この欠陥に対処する保守的な方法は、パッケージ
の継承ツリー内で接続されていないいかなる2つのクラ
スも、互いに間接的に拡張することができると仮定する
ことである。
【0035】図6、図7、図8、図9および図10の基
本アルゴリズムは、パッケージ間継承に対処するための
非常にわずかな修正を含む。(メソッドのパッケージ化
された非final宣言と共に)パッケージ間拡張を可能に
するpublicサブクラスに出会った場合、このパッケージ
の他のルート・クラスがすべて検査され、それらが潜在
的にパッケージ化メソッドをオーバーライドできるかど
うかが調べられる。図6、図7、図8および図9のPubl
icNonFinalSubclassFound定数に関するコードを参照す
る。
【0036】図6、図7、図8、図9および図10に図
示したアルゴリズムの複雑性については、パッケージの
Javaクラス・ファイル(バイトコード)またはJa
vaソース・ファイルが与えられると、パッケージの継
承グラフが効率的に構築できることにまず留意された
い。さらに、そのスーパークラス、スーパーインタフェ
ースおよび宣言されたメソッドを検査するために、各ク
ラスを一度だけ訪れることができる。パッケージの継承
グラフが与えられると、アルゴリズムが、各サブクラス
および時にはスーパークラスをせいぜい一度訪ねる必要
がある。しかし、クラス(インタフェース)はいくつか
のインタフェースを実装(拡張)することができるの
で、継承グラフをツリーにすることはできないが、汎用
有向非周期グラフ(DAG)にすることができる。した
がって、クラスまたはインタフェースを複数回訪れるこ
とを避けるため、クラスおよびインタフェースに最初に
訪れたときに、これらにマークを付けることができる。
同様に、このような探索を繰り返すことを避けるため
に、継承された宣言を求めて「上方に」探索された(ス
ーパー)クラス、およびパッケージ間継承を求めて探索
された「ルート」のマーク付けを行うことができる。こ
れらの修正は、メソッドのすべてのオーバーライドを発
見する標準アルゴリズムにも関連する。
【0037】可能なパッケージ間継承の探索を速くする
ために、各ルート・クラスが、その継承ツリー内部で
(publicと)宣言されたメソッドのリストを含む(また
はその逆で、各メソッドを、それが宣言されるクラスお
よびクラス・ツリーに関連付けることができる)よう
に、継承グラフを前処理することができる。2つの異な
るツリー内に現れるメソッドのみが対象であり、java.l
ang.Objectを直接拡張するルートを有するツリーは、Ob
jectが他のクラスを拡張しないので、無視することがで
きる。
【0038】封印呼び出しのターゲットの完全セットを
決定するために、封印呼び出しを識別するためのアルゴ
リズムを、探索で発見されたオーバーライド実装を収集
するように、極めて容易に調節することができる。
【0039】本発明によるアルゴリズムのベンチマーキ
ングで、封印であると判明した呼び出しの非常に高い割
合が、厳密に1つの可能ターゲットを有しており、した
がって直接インライン化に適した候補であることが判明
した。
【0040】したがって、本発明は、パッケージ化クラ
ス、インタフェースおよびメソッドのデフォルトのアク
セス許可を、Javaパッケージを封印し署名する能力
と共に使用して、ある呼び出しのターゲットの完全セッ
トを決定する。
【0041】この解析を機能強化し、できれば追加呼び
出しを封印であるとして類別する1つの方法は、D. Bac
onおよびP. Sweeneyの「Fast Static Analysis of C++
Virtual Function Calls」、proc. of the 1996 ACM Co
nference on Object Oriented Programming Systems, L
anguages and Applications(OOPSLA)1996
年10月、カリフォルニア州サンノゼ、325〜341
ページに記載されたような、活性情報を使用することで
ある。たとえば、パッケージ化クラスまたはpublic(ま
たはprotected)コンストラクタを有していないクラス
は、パッケージ内部でインスタンス化される場合にのみ
活性であるとみなすことができる。しかし、(呼び出し
が封印されないようにする)publicクラスは(それがpu
blicまたはprotectedコンストラクタを有する場合)活
性であるとみなさなければならないので、このように追
加呼び出しを「封印」する希望はほとんどない。一方、
活性情報は、封印呼び出しが有することが知られている
ターゲット数を潜在的に減らすことができる。
【0042】追加呼び出しを封印することができる別の
方法は、データ・フロー解析を使用して呼び出されるク
ラスの可能なタイプをよりよく決定することである。こ
のような方法には追加封印呼び出しを識別する潜在能力
があるが、本発明による継承グラフ・タイプのアルゴリ
ズムよりも著しく複雑である。
【0043】本発明によるアルゴリズムは、呼び出され
たメソッドにのみ関係する情報に基づいて、呼び出しを
封印呼び出しとして類別することに留意されたい。実際
に、このアルゴリズムは封印メソッド、すなわち同じパ
ッケージ内からのみ呼び出すことができるメソッドを識
別し、そのような各呼び出しは封印呼び出しであること
が保証されている。
【0044】ソフトウェア開発者は、適切なクラス、イ
ンタフェースおよびメソッドに対するデフォルトの(パ
ッケージ化)アクセス許可を使用し、それらの関連パッ
ケージを封印かつ署名することによって、アプリケーシ
ョンの性能を向上させることができる。アプリケーショ
ンの作業が、パッケージ間の呼び出しではなくパッケー
ジ内部に集中する場合、この作業を安全に加速すること
ができる。
【0045】図11は、Java封印パッケージにおい
てこのターゲットが前記パッケージに属することが保証
されている呼び出しを識別するためのコンピュータ・シ
ステム40を機能的に示すブロック図である。システム
40は、パッケージが封印され署名されることを検証す
るための検証ユニット41、およびパッケージのクラス
階層グラフを決定するためのCHGユニット42を備え
る。パッケージ内のそれぞれのコンポーネントのアクセ
ス許可を決定するためのアクセス許可ユニット43が設
けられている。ターゲット・プロセッサ44は、検証ユ
ニット41、CHGユニット42およびアクセス許可ユ
ニット43に結合され、パッケージが封印され署名され
ているという知識と組み合わせて、クラス階層グラフお
よびアクセス許可に応答して、呼び出しのすべてのター
ゲットが前記パッケージに属することが保証されている
かどうかを判定する。ターゲット・プロセッサ44は、
呼び出されたメソッドをパッケージ外部のメソッドによ
って直接オーバーライドまたは実装することができるか
どうかを判定し、そうである場合は、この呼び出しを、
そのターゲットがすべて同じ封印パッケージに属するこ
とが保証されているのではない呼び出しとして識別する
ための、直接オーバーライド・ユニット45を含む。
【0046】ターゲット・プロセッサ44は、呼び出さ
れたメソッドをパッケージ内部のメソッドによって直接
または間接的にオーバーライドまたは実装することがで
き、それによってパッケージ外部のメソッドによって間
接的にオーバーライドまたは実装できるかどうかを判定
するための、間接オーバーライド・ユニット46をさら
に含む。そうである場合、システム40は、この呼び出
しを、そのターゲットがすべて同じ封印パッケージに属
することが保証されているのではない呼び出しとして識
別する。
【0047】間接オーバーライド・ユニット46は、現
在処理中のクラスまたはインタフェースから開始して、
継承グラフ内の各クラスまたはインタフェースおよび関
連するサブクラスおよびサブ・インタフェースに沿って
継承グラフを走査するための、サブクラス検査ユニット
47を含む。サブクラス検査ユニット47は、メソッド
を非finalでpublicまたはprotectedとして宣言するか、
または、クラスまたはインタフェースの親からこのよう
な宣言を継承する、publicで非finalのサブクラスが存
在するかどうかを判定する。そうである場合、システム
40は、この呼び出しを、そのターゲットがすべて同じ
封印パッケージに属することが保証されているのではな
い呼び出しとして識別する。
【0048】間接オーバーライド・ユニット46はさら
に、パッケージ外部の1つまたは複数のクラスを介し
て、別の継承ツリーのクラスによってクラスをサブクラ
ス化できるかどうか、およびこのクラスが別の継承ツリ
ーのクラスにメソッドを渡すことができるかどうかを判
定するための、多重ツリー解析ユニット48を含む。そ
うである場合、サブクラス検査ユニット47がこのよう
な各継承ツリーについて使用される。
【0049】間接オーバーライド・ユニット46はさら
に、内部クラスがインスタンス化できるように、インタ
フェースを実装して外部クラスのメソッドの実装を継承
するパッケージ内の「内部」クラスを介して、パッケー
ジ外部の「外部」クラスのメソッドによって、インタフ
ェースを実装できるかどうかを検査するための、スーパ
ークラス検査ユニット49を含む。そうである場合、シ
ステム40は、この呼び出しを、そのターゲットがすべ
て同じ封印パッケージに属することが保証されているの
ではない呼び出しとして識別する。
【0050】ターゲット・プロセッサはさらに、そのタ
ーゲットがすべて同じ封印パッケージに属することが保
証されている呼び出しの可能ターゲットのセットを決定
するための、可能ターゲット・ユニット50を含む。
【0051】記憶ユニット51は、ターゲット・プロセ
ッサ44の出力に結合され、パッケージ内の呼び出し
が、そのターゲットがすべて同じ封印パッケージに属す
ることが保証されている呼び出しとして識別されるかど
うかについての、結果を記憶する。図1を参照して上述
したように、この情報は、後で独立に使用するために、
パッケージの内部または外部に別々に記憶することがで
きる。
【0052】プログラム解析ユニット52も、ターゲッ
ト・プロセッサ44の出力に結合され、そのターゲット
が同じパッケージに属することが保証されている呼び出
しについての情報を使用して、Javaパッケージの手
順間プログラム解析を実行する。ターゲット・プロセッ
サ44の出力には、そのターゲットが同じパッケージに
属することが保証されている呼び出しについての情報を
使用して、Javaパッケージの手順間コードまたはコ
ンパイラ最適化、あるいはその両方を実行する、最適化
ユニット53も接続される。最適化ユニット53には、
最適化ユニット53から導出された最適化かつコンパイ
ル済みプログラムを記憶することができる記憶媒体54
が結合される。
【0053】本発明は、本発明に従って実行するための
コンピュータ・プログラムを記憶する記憶媒体、ならび
に本発明に従って生成されたコンパイル済みプログラム
・データを記憶する記憶媒体も企図することを理解され
たい。
【0054】頭記の方法クレームにおいて、請求項のス
テップを示すために使用するアルファベット文字は、便
宜上つけたものであり、ステップを実行する特定の順序
を意味するものではない。同様に、呼び出しが「封印」
であるとして除去される順序は重要ではないので、方法
クレームが現れる順序を拘束的なものとみなすべきでは
ないことを理解されたい。
【0055】まとめとして、本発明の構成に関して以下
の事項を開示する。
【0056】(1)Java封印パッケージにおいてそ
のターゲットが前記パッケージに属することが保証され
ている呼び出しを識別する方法であって、(1)前記パ
ッケージが封印され署名されていることを検証するステ
ップと、(2)前記パッケージのクラスおよびインタフ
ェースのクラス階層グラフを得るステップと、(3)前
記パッケージ内のそれぞれのコンポーネントのアクセス
許可を得るステップと、(4)前記呼び出しのすべての
ターゲットが前記パッケージに属することが保証されて
いるかどうかを判定するために、前記クラス階層グラフ
およびアクセス許可を前記パッケージが封印され署名さ
れているという知識と組み合わせて使用するステップと
を含む方法。 (2)ステップ(4)が、 a)呼び出されたメソッドを、前記パッケージ外部のメ
ソッドによって直接オーバーライドまたは実装すること
ができるかどうかを判定するステップと、 b)そうである場合に、前記呼び出しを、そのターゲッ
トがすべて同じパッケージに属することが保証されてい
るのではない呼び出しとして識別するステップとを含
む、上記(1)に記載の方法。 (3)c)呼び出されたメソッドが、前記パッケージ内
部で直接または間接的にオーバーライドまたは実装する
ことができ、それによって前記パッケージ外部のメソッ
ドによって間接的にオーバーライドまたは実装できるか
どうかを判定するステップと、 d)そうである場合に、前記呼び出しを、そのターゲッ
トがすべて同じパッケージに属することが保証されてい
るのではない呼び出しとして識別するステップとをさら
に含む、上記(2)に記載の方法。 (4)ステップ(d)が、前記呼び出されたメソッドの
前記クラスまたはインタフェースから開始して、前記ク
ラス階層グラフを走査するステップと、前記メソッドを
非finalでpublicまたはprotectedとして宣言するか、ま
たは、前記クラスまたはインタフェースの親からこのよ
うな宣言を継承する、publicで非finalのサブクラスを
探索するステップと、このようなサブクラスが発見され
た場合に、前記呼び出しを、そのターゲットがすべて同
じパッケージに属することが保証されているのではない
呼び出しとして識別するステップとを含む、上記(3)
に記載の方法。 (5)前記クラスを、前記パッケージ外部の1つまたは
複数のクラスを介して別の継承ツリーのクラスによって
サブクラス化できるかどうか、および前記クラスが前記
メソッドを別の継承ツリーのクラスに渡すことができる
かどうかを判定するステップと、そうである場合に、前
記クラスのメソッドを考慮する際に、上記(4)に記載
の方法を、前記別の継承ツリーの前記クラスにも適用す
るステップとをさらに含む、上記(4)に記載の方法。 (6)インタフェースのメソッドを、前記インタフェー
スを実装して前記外部クラスから前記メソッドの実装を
継承する前記パッケージ内で、「内部」クラスを介し
て、前記パッケージ外部の「外部」クラスのメソッドに
よって実装できるかどうかを検査するステップと、その
ような内部クラスをインスタンス化できるかどうかを検
査するステップと、そのようなクラスまたはサブクラス
が発見された場合、前記呼び出しを、そのターゲットが
すべて前記パッケージに属することが保証されているの
ではない呼び出しとして識別するステップとを含む、上
記(5)に記載の方法。 (7)前記呼び出しが、そのターゲットがすべて同じパ
ッケージに属することが保証されているのではない呼び
出しとして識別されなかった場合に、前記呼び出しを、
そのターゲットがすべて前記パッケージに属することが
保証されている呼び出しとして識別するステップをさら
に含む、上記(6)に記載の方法。 (8)そのターゲットがすべて前記パッケージに属する
ことが保証されている呼び出しの、可能な1組のターゲ
ットを決定するステップをさらに含む、上記(7)に記
載の方法。 (9)そのターゲットがすべて前記パッケージに属する
ことが保証されている呼び出しについての情報を使用し
て、Java封印パッケージの手順間プログラム解析ま
たは最適化、あるいはその両方を実行するステップをさ
らに含む、上記(8)に記載の方法。 (10)前記パッケージが封印され署名されるのと実質
的に同時に実行される、上記(1)に記載の方法。 (11)そのターゲットがすべて前記パッケージならび
に前記ターゲットに属することが保証されている呼び出
しの指示を、前記パッケージ内部に埋め込むステップを
含む、上記(7)に記載の方法。 (12)前記パッケージが封印され署名された後に実行
される、上記(1)に記載の方法。 (13)プログラム解析または最適化、あるいはその両
方の前に実行される、上記(12)に記載の方法。 (14)プログラム解析または最適化、あるいはその両
方と実質的に一緒に実行される、上記(12)に記載の
方法。 (15)Java封印パッケージにおいてそのターゲッ
トが前記パッケージに属することが保証されている呼び
出しを識別するコンピュータ・システムであって、前記
パッケージがすでに封印され署名されているか、それと
もこれから封印され署名されるかを検証するための検証
ユニットと、前記検証ユニットに結合され、前記パッケ
ージが封印され署名されるという知識と組み合わせて、
先に導出された継承グラフおよび先に導出されたアクセ
ス許可に応答して、呼び出しのすべてのターゲットが前
記パッケージに属することが保証されているかどうかを
判定する、ターゲット・プロセッサとを含むシステム。 (16)前記パッケージのクラスおよびインタフェース
の階層グラフを構築するためのCHGユニットと、前記
パッケージ内のそれぞれのコンポーネントのアクセス許
可および関連修飾子を決定するためのアクセス許可ユニ
ットとをさらに含み、前記ターゲット・プロセッサが、
先に導出された継承グラフおよび先に導出されたアクセ
ス許可をそこから受信するために前記CHGユニットお
よび前記アクセス許可ユニットに結合されている、上記
(15)に記載のシステム。 (17)前記ターゲット・プロセッサが、呼び出された
メソッドを前記パッケージ外部のメソッドによって直接
オーバーライドまたは実装することができるかどうかを
判定し、そうである場合に、前記呼び出しを、そのター
ゲットがすべて前記パッケージに属することが保証され
ているのではない呼び出しとして識別する、直接オーバ
ーライド・ユニットを含む、上記(15)に記載のシス
テム。 (18)前記ターゲット・プロセッサが、呼び出された
メソッドを前記パッケージ内部のメソッドによって直接
または間接的にオーバーライドまたは実装することがで
き、それによって、呼び出されたメソッドを前記パッケ
ージ外部のメソッドによって間接的にオーバーライドま
たは実装できるかどうかを判定し、そうである場合に、
前記呼び出しを、そのターゲットがすべて前記パッケー
ジに属することが保証されているのではない呼び出しと
して識別する、間接オーバーライド・ユニットを含む、
上記(15)に記載のシステム。 (19)前記間接オーバーライド・ユニットが、前記ク
ラスまたはインタフェースから開始して前記継承グラフ
を走査し、かつ、前記メソッドを非finalでpublicまた
はprotectedとして宣言するか、または前記クラスまた
はインタフェースの親からこのような宣言を継承するpu
blicで非finalのサブクラスが存在するかどうかを判定
し、そうである場合に、前記呼び出しを、そのターゲッ
トがすべて前記パッケージに属することが保証されてい
るのではない呼び出しとして識別する、サブクラス検査
ユニットを含む、上記(18)に記載のシステム。 (20)前記間接オーバーライド・ユニットが、前記ク
ラスが、前記パッケージ外部の1つまたは複数のクラス
を介して、別の継承ツリーのクラスによってサブクラス
化できるかどうか、および前記クラスが前記メソッドを
別の継承ツリーのクラスに渡すことができるかどうかを
判定し、そうである場合に、このような各継承ツリーに
ついて前記サブクラス検査ユニットを使用する、多重ツ
リー解析ユニットを含む、上記(18)に記載のシステ
ム。 (21)前記間接オーバーライド・ユニットが、前記内
部クラスがインスタンス化できるように、前記インタフ
ェースが、前記インタフェースを実装して前記外部クラ
スから前記メソッドの実装を継承する前記パッケージ内
で、「内部」クラスを介して、前記パッケージ外部の
「外部」クラスのメソッドによって実装できるかどうか
を検査し、そうである場合に、前記呼び出しを、そのタ
ーゲットがすべて前記パッケージに属することが保証さ
れているのではない呼び出しとして識別する、スーパー
クラス検査ユニットを含む、上記(18)に記載のシス
テム。 (22)前記ターゲット・プロセッサに結合され、その
ターゲットがすべて前記パッケージに属することが保証
されている呼び出しについての情報を使用して、Jav
aパッケージの手順間プログラム解析を実行するための
プログラム解析ユニットをさらに含む、上記(15)に
記載のシステム。 (23)前記ターゲット・プロセッサが、そのターゲッ
トがすべて前記パッケージに属することが保証されてい
る呼び出しの、可能な1組のターゲットを決定するため
の、可能ターゲット・ユニットをさらに含む、上記(1
8)に記載のシステム。 (24)前記ターゲット・プロセッサに結合され、その
ターゲットがすべて前記パッケージに属することが保証
されている呼び出しについての情報を使用して、Jav
aパッケージの手順間最適化を実行するための最適化ユ
ニットをさらに含む、上記(15)に記載のシステム。 (25)前記ターゲット・プロセッサに結合され、前記
パッケージの内部または外部に、そのターゲットがすべ
て前記パッケージに属することが保証されている呼び出
しについての情報を記憶するための記憶ユニットをさら
に含む、上記(15)に記載のシステム。 (26)前記最適化ユニットに結合され、前記最適化ユ
ニットによって生成された最適化されたプログラム・デ
ータを記憶するための記憶媒体をさらに含む、上記(2
4)に記載のシステム。 (27)上記(1)に記載の方法を実行するためのコン
ピュータ・プログラムを記憶する記憶媒体。 (28)上記(9)に記載の方法によって生成された、
コンパイル済みのプログラム・データを記憶する記憶媒
体。
【図面の簡単な説明】
【図1】本発明による方法における主な動作ステップを
示す流れ図である。
【図2】本発明による方法における主な動作ステップを
示す流れ図である。
【図3】本発明で扱う、パッケージ内の各メソッドに課
せられたアクセス制限を決定するための継承シナリオを
示す図である。
【図4】本発明で扱う、パッケージ内の各メソッドに課
せられたアクセス制限を決定するための継承シナリオを
示す図である。
【図5】本発明で扱う、パッケージ内の各メソッドに課
せられたアクセス制限を決定するための継承シナリオを
示す図である。
【図6】本発明に関連するさまざまなソフトウェア・ア
ルゴリズムを実装するためのコードの詳細を示す図であ
る。
【図7】本発明に関連するさまざまなソフトウェア・ア
ルゴリズムを実装するためのコードの詳細を示す図であ
る。
【図8】本発明に関連するさまざまなソフトウェア・ア
ルゴリズムを実装するためのコードの詳細を示す図であ
る。
【図9】本発明に関連するさまざまなソフトウェア・ア
ルゴリズムを実装するためのコードの詳細を示す図であ
る。
【図10】本発明に関連するさまざまなソフトウェア・
アルゴリズムを実装するためのコードの詳細を示す図で
ある。
【図11】本発明による「封印呼び出し」を識別するた
めのシステムを機能的に示すブロック図である。
【符号の説明】
40 システム 44 ターゲット・プロセッサ 46 間接オーバーライド・ユニット 49 スーパークラス検査ユニット 50 可能ターゲット・ユニット 51 記憶ユニット 52 プログラム解析ユニット 53 最適化ユニット 54 記憶媒体
───────────────────────────────────────────────────── フロントページの続き (72)発明者 フェルドマン・ヴィタリ イスラエル国ハイファ、テクニオン、ピー オーボックス411 (72)発明者 ザックス・アヤル イスラエル国ディー・エヌ・ミスガヴ、ミ ッペ・アヴィヴ24

Claims (28)

    【特許請求の範囲】
  1. 【請求項1】Java封印パッケージにおいてそのター
    ゲットが前記パッケージに属することが保証されている
    呼び出しを識別する方法であって、 (1)前記パッケージが封印され署名されていることを
    検証するステップと、 (2)前記パッケージのクラスおよびインタフェースの
    クラス階層グラフを得るステップと、 (3)前記パッケージ内のそれぞれのコンポーネントの
    アクセス許可を得るステップと、 (4)前記呼び出しのすべてのターゲットが前記パッケ
    ージに属することが保証されているかどうかを判定する
    ために、前記クラス階層グラフおよびアクセス許可を前
    記パッケージが封印され署名されているという知識と組
    み合わせて使用するステップとを含む方法。
  2. 【請求項2】ステップ(4)が、 a)呼び出されたメソッドを、前記パッケージ外部のメ
    ソッドによって直接オーバーライドまたは実装すること
    ができるかどうかを判定するステップと、 b)そうである場合に、前記呼び出しを、そのターゲッ
    トがすべて同じパッケージに属することが保証されてい
    るのではない呼び出しとして識別するステップとを含
    む、請求項1に記載の方法。
  3. 【請求項3】c)呼び出されたメソッドが、前記パッケ
    ージ内部で直接または間接的にオーバーライドまたは実
    装することができ、それによって前記パッケージ外部の
    メソッドによって間接的にオーバーライドまたは実装で
    きるかどうかを判定するステップと、 d)そうである場合に、前記呼び出しを、そのターゲッ
    トがすべて同じパッケージに属することが保証されてい
    るのではない呼び出しとして識別するステップとをさら
    に含む、請求項2に記載の方法。
  4. 【請求項4】ステップ(d)が、 前記呼び出されたメソッドの前記クラスまたはインタフ
    ェースから開始して、前記クラス階層グラフを走査する
    ステップと、 前記メソッドを非finalでpublicまたはprotectedとして
    宣言するか、または、前記クラスまたはインタフェース
    の親からこのような宣言を継承する、publicで非final
    のサブクラスを探索するステップと、 このようなサブクラスが発見された場合に、前記呼び出
    しを、そのターゲットがすべて同じパッケージに属する
    ことが保証されているのではない呼び出しとして識別す
    るステップとを含む、請求項3に記載の方法。
  5. 【請求項5】前記クラスを、前記パッケージ外部の1つ
    または複数のクラスを介して別の継承ツリーのクラスに
    よってサブクラス化できるかどうか、および前記クラス
    が前記メソッドを別の継承ツリーのクラスに渡すことが
    できるかどうかを判定するステップと、そうである場合
    に、 前記クラスのメソッドを考慮する際に、請求項4に記載
    の方法を、前記別の継承ツリーの前記クラスにも適用す
    るステップとをさらに含む、請求項4に記載の方法。
  6. 【請求項6】インタフェースのメソッドを、前記インタ
    フェースを実装して前記外部クラスから前記メソッドの
    実装を継承する前記パッケージ内で、「内部」クラスを
    介して、前記パッケージ外部の「外部」クラスのメソッ
    ドによって実装できるかどうかを検査するステップと、 そのような内部クラスをインスタンス化できるかどうか
    を検査するステップと、 そのようなクラスまたはサブクラスが発見された場合、
    前記呼び出しを、そのターゲットがすべて前記パッケー
    ジに属することが保証されているのではない呼び出しと
    して識別するステップとを含む、請求項5に記載の方
    法。
  7. 【請求項7】前記呼び出しが、そのターゲットがすべて
    同じパッケージに属することが保証されているのではな
    い呼び出しとして識別されなかった場合に、前記呼び出
    しを、そのターゲットがすべて前記パッケージに属する
    ことが保証されている呼び出しとして識別するステップ
    をさらに含む、請求項6に記載の方法。
  8. 【請求項8】そのターゲットがすべて前記パッケージに
    属することが保証されている呼び出しの、可能な1組の
    ターゲットを決定するステップをさらに含む、請求項7
    に記載の方法。
  9. 【請求項9】そのターゲットがすべて前記パッケージに
    属することが保証されている呼び出しについての情報を
    使用して、Java封印パッケージの手順間プログラム
    解析または最適化、あるいはその両方を実行するステッ
    プをさらに含む、請求項8に記載の方法。
  10. 【請求項10】前記パッケージが封印され署名されるの
    と実質的に同時に実行される、請求項1に記載の方法。
  11. 【請求項11】そのターゲットがすべて前記パッケージ
    ならびに前記ターゲットに属することが保証されている
    呼び出しの指示を、前記パッケージ内部に埋め込むステ
    ップを含む、請求項7に記載の方法。
  12. 【請求項12】前記パッケージが封印され署名された後
    に実行される、請求項1に記載の方法。
  13. 【請求項13】プログラム解析または最適化、あるいは
    その両方の前に実行される、請求項12に記載の方法。
  14. 【請求項14】プログラム解析または最適化、あるいは
    その両方と実質的に一緒に実行される、請求項12に記
    載の方法。
  15. 【請求項15】Java封印パッケージにおいてそのタ
    ーゲットが前記パッケージに属することが保証されてい
    る呼び出しを識別するコンピュータ・システムであっ
    て、前記パッケージがすでに封印され署名されている
    か、それともこれから封印され署名されるかを検証する
    ための検証ユニットと、 前記検証ユニットに結合され、前記パッケージが封印さ
    れ署名されるという知識と組み合わせて、先に導出され
    た継承グラフおよび先に導出されたアクセス許可に応答
    して、呼び出しのすべてのターゲットが前記パッケージ
    に属することが保証されているかどうかを判定する、タ
    ーゲット・プロセッサとを含むシステム。
  16. 【請求項16】前記パッケージのクラスおよびインタフ
    ェースの階層グラフを構築するためのCHGユニット
    と、 前記パッケージ内のそれぞれのコンポーネントのアクセ
    ス許可および関連修飾子を決定するためのアクセス許可
    ユニットとをさらに含み、 前記ターゲット・プロセッサが、先に導出された継承グ
    ラフおよび先に導出されたアクセス許可をそこから受信
    するために前記CHGユニットおよび前記アクセス許可
    ユニットに結合されている、請求項15に記載のシステ
    ム。
  17. 【請求項17】前記ターゲット・プロセッサが、 呼び出されたメソッドを前記パッケージ外部のメソッド
    によって直接オーバーライドまたは実装することができ
    るかどうかを判定し、そうである場合に、前記呼び出し
    を、そのターゲットがすべて前記パッケージに属するこ
    とが保証されているのではない呼び出しとして識別す
    る、直接オーバーライド・ユニットを含む、請求項15
    に記載のシステム。
  18. 【請求項18】前記ターゲット・プロセッサが、 呼び出されたメソッドを前記パッケージ内部のメソッド
    によって直接または間接的にオーバーライドまたは実装
    することができ、それによって、呼び出されたメソッド
    を前記パッケージ外部のメソッドによって間接的にオー
    バーライドまたは実装できるかどうかを判定し、そうで
    ある場合に、前記呼び出しを、そのターゲットがすべて
    前記パッケージに属することが保証されているのではな
    い呼び出しとして識別する、間接オーバーライド・ユニ
    ットを含む、請求項15に記載のシステム。
  19. 【請求項19】前記間接オーバーライド・ユニットが、 前記クラスまたはインタフェースから開始して前記継承
    グラフを走査し、かつ、前記メソッドを非finalでpubli
    cまたはprotectedとして宣言するか、または前記クラス
    またはインタフェースの親からこのような宣言を継承す
    るpublicで非finalのサブクラスが存在するかどうかを
    判定し、そうである場合に、前記呼び出しを、そのター
    ゲットがすべて前記パッケージに属することが保証され
    ているのではない呼び出しとして識別する、サブクラス
    検査ユニットを含む、請求項18に記載のシステム。
  20. 【請求項20】前記間接オーバーライド・ユニットが、 前記クラスが、前記パッケージ外部の1つまたは複数の
    クラスを介して、別の継承ツリーのクラスによってサブ
    クラス化できるかどうか、および前記クラスが前記メソ
    ッドを別の継承ツリーのクラスに渡すことができるかど
    うかを判定し、そうである場合に、このような各継承ツ
    リーについて前記サブクラス検査ユニットを使用する、
    多重ツリー解析ユニットを含む、請求項18に記載のシ
    ステム。
  21. 【請求項21】前記間接オーバーライド・ユニットが、 前記内部クラスがインスタンス化できるように、前記イ
    ンタフェースが、前記インタフェースを実装して前記外
    部クラスから前記メソッドの実装を継承する前記パッケ
    ージ内で、「内部」クラスを介して、前記パッケージ外
    部の「外部」クラスのメソッドによって実装できるかど
    うかを検査し、そうである場合に、前記呼び出しを、そ
    のターゲットがすべて前記パッケージに属することが保
    証されているのではない呼び出しとして識別する、スー
    パークラス検査ユニットを含む、請求項18に記載のシ
    ステム。
  22. 【請求項22】前記ターゲット・プロセッサに結合さ
    れ、そのターゲットがすべて前記パッケージに属するこ
    とが保証されている呼び出しについての情報を使用し
    て、Javaパッケージの手順間プログラム解析を実行
    するためのプログラム解析ユニットをさらに含む、請求
    項15に記載のシステム。
  23. 【請求項23】前記ターゲット・プロセッサが、 そのターゲットがすべて前記パッケージに属することが
    保証されている呼び出しの、可能な1組のターゲットを
    決定するための、可能ターゲット・ユニットをさらに含
    む、請求項18に記載のシステム。
  24. 【請求項24】前記ターゲット・プロセッサに結合さ
    れ、そのターゲットがすべて前記パッケージに属するこ
    とが保証されている呼び出しについての情報を使用し
    て、Javaパッケージの手順間最適化を実行するため
    の最適化ユニットをさらに含む、請求項15に記載のシ
    ステム。
  25. 【請求項25】前記ターゲット・プロセッサに結合さ
    れ、前記パッケージの内部または外部に、そのターゲッ
    トがすべて前記パッケージに属することが保証されてい
    る呼び出しについての情報を記憶するための記憶ユニッ
    トをさらに含む、請求項15に記載のシステム。
  26. 【請求項26】前記最適化ユニットに結合され、前記最
    適化ユニットによって生成された最適化されたプログラ
    ム・データを記憶するための記憶媒体をさらに含む、請
    求項24に記載のシステム。
  27. 【請求項27】請求項1に記載の方法を実行するための
    コンピュータ・プログラムを記憶する記憶媒体。
  28. 【請求項28】請求項9に記載の方法によって生成され
    た、コンパイル済みのプログラム・データを記憶する記
    憶媒体。
JP2000068025A 1999-03-16 2000-03-13 呼び出しを識別する方法、システムおよび記憶媒体 Pending JP2000293379A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/270,661 US6526571B1 (en) 1999-03-16 1999-03-16 Method for identifying calls in java packages whose targets are guaranteed to belong to the same package
US09/270661 1999-03-16

Publications (1)

Publication Number Publication Date
JP2000293379A true JP2000293379A (ja) 2000-10-20

Family

ID=23032260

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000068025A Pending JP2000293379A (ja) 1999-03-16 2000-03-13 呼び出しを識別する方法、システムおよび記憶媒体

Country Status (8)

Country Link
US (1) US6526571B1 (ja)
EP (1) EP1037141B1 (ja)
JP (1) JP2000293379A (ja)
KR (1) KR20010006750A (ja)
AT (1) ATE359546T1 (ja)
DE (1) DE60034263T2 (ja)
IL (1) IL134133A (ja)
TW (1) TW509871B (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020032889A (ko) * 2000-10-27 2002-05-04 오길록 자바 클래스 파일 분석을 이용한 클래스 호출관계 표시 방법
US9317828B2 (en) 2007-02-28 2016-04-19 International Business Machines Corporation Facilitating provisioning in a mixed environment of locales

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6687760B1 (en) * 1999-08-13 2004-02-03 Sun Microsystems, Inc. Method and apparatus for preforming method lookup in the presence of modularity constructs to support transitive method override
US6687759B1 (en) * 1999-08-13 2004-02-03 Sun Microsystems, Inc. Method and apparatus for performing method lookup in the presence of modularity constructs to support transitive method override
US7158993B1 (en) * 1999-11-12 2007-01-02 Sun Microsystems, Inc. API representation enabling submerged hierarchy
US7089242B1 (en) * 2000-02-29 2006-08-08 International Business Machines Corporation Method, system, program, and data structure for controlling access to sensitive functions
JP3555858B2 (ja) * 2000-03-23 2004-08-18 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの編集方法、シングルパッケージ化システム、プログラム開発システム、プログラムの身元情報付加システム及び記憶媒体
US6986132B1 (en) 2000-04-28 2006-01-10 Sun Microsytems, Inc. Remote incremental program binary compatibility verification using API definitions
US6883163B1 (en) 2000-04-28 2005-04-19 Sun Microsystems, Inc. Populating resource-constrained devices with content verified using API definitions
US6651186B1 (en) * 2000-04-28 2003-11-18 Sun Microsystems, Inc. Remote incremental program verification using API definitions
US6981245B1 (en) 2000-09-14 2005-12-27 Sun Microsystems, Inc. Populating binary compatible resource-constrained devices with content verified using API definitions
US7793277B2 (en) * 2001-09-07 2010-09-07 International Business Machines Corporation Compiler apparatus and method for devirtualizing virtual method calls
US7181737B2 (en) * 2002-03-18 2007-02-20 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using static procedure return addresses
US7010783B2 (en) * 2002-03-18 2006-03-07 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using reduced dynamic memory allocation
US6912633B2 (en) * 2002-03-18 2005-06-28 Sun Microsystems, Inc. Enhanced memory management for portable devices
US6996802B2 (en) * 2002-03-18 2006-02-07 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using initialization order and calling order constraints
US7149752B2 (en) * 2002-12-03 2006-12-12 Jp Morgan Chase Bank Method for simplifying databinding in application programs
US7085759B2 (en) 2002-12-06 2006-08-01 Jpmorgan Chase Bank System and method for communicating data to a process
US8032439B2 (en) 2003-01-07 2011-10-04 Jpmorgan Chase Bank, N.A. System and method for process scheduling
US20040143739A1 (en) * 2003-01-16 2004-07-22 Sun Mircosystems, Inc., A Delaware Corporation Run time code integrity checks
US7272830B2 (en) * 2003-01-16 2007-09-18 Sun Microsystems, Inc. Ordering program data for loading on a device
US7222331B2 (en) * 2003-01-16 2007-05-22 Sun Microsystems, Inc. Linking of virtual methods
US7165246B2 (en) * 2003-01-16 2007-01-16 Sun Microsystems, Inc. Optimized representation of data type information in program verification
US7484095B2 (en) * 2003-01-16 2009-01-27 Sun Microsystems, Inc. System for communicating program data between a first device and a second device
US8121955B2 (en) * 2003-01-16 2012-02-21 Oracle America, Inc. Signing program data payload sequence in program loading
US7281244B2 (en) * 2003-01-16 2007-10-09 Sun Microsystems, Inc. Using a digital fingerprint to commit loaded data in a device
US7401156B2 (en) * 2003-02-03 2008-07-15 Jp Morgan Chase Bank Method using control interface to suspend software network environment running on network devices for loading and executing another software network environment
US7379998B2 (en) * 2003-03-31 2008-05-27 Jp Morgan Chase Bank System and method for multi-platform queue queries
US7814073B2 (en) * 2003-05-02 2010-10-12 Jp Morgan Chase Bank Utility for identifying differences between two Java objects
US20040230602A1 (en) * 2003-05-14 2004-11-18 Andrew Doddington System and method for decoupling data presentation layer and data gathering and storage layer in a distributed data processing system
US7366722B2 (en) * 2003-05-15 2008-04-29 Jp Morgan Chase Bank System and method for specifying application services and distributing them across multiple processors using XML
US8095659B2 (en) 2003-05-16 2012-01-10 Jp Morgan Chase Bank Service interface
US7594219B2 (en) * 2003-07-24 2009-09-22 International Business Machines Corporation Method and apparatus for monitoring compatibility of software combinations
US7395527B2 (en) 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US8381037B2 (en) 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US20050144174A1 (en) * 2003-12-31 2005-06-30 Leonid Pesenson Framework for providing remote processing of a graphical user interface
US7895382B2 (en) 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US7415705B2 (en) 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US20050222990A1 (en) * 2004-04-06 2005-10-06 Milne Kenneth T Methods and systems for using script files to obtain, format and disseminate database information
WO2005111795A1 (fr) * 2004-04-14 2005-11-24 France Telecom Procede d’evaluation de compatibilite d’une application et d’une plateforme de type java
US7376830B2 (en) * 2004-04-26 2008-05-20 Jp Morgan Chase Bank System and method for routing messages
US7392471B1 (en) 2004-07-28 2008-06-24 Jp Morgan Chase Bank System and method for comparing extensible markup language (XML) documents
US7493601B2 (en) * 2004-11-19 2009-02-17 International Business Machines Corporation System and method for providing access to programmer created JAVA classes
US7499933B1 (en) 2005-11-12 2009-03-03 Jpmorgan Chase Bank, N.A. System and method for managing enterprise application configuration
JP4844102B2 (ja) * 2005-11-30 2011-12-28 富士ゼロックス株式会社 サブプログラム及びそのサブプログラムを実行する情報処理装置
US8151243B1 (en) * 2006-06-06 2012-04-03 Oracle America, Inc. System and method for determining whether an array is a read-only array
US7610172B2 (en) 2006-06-16 2009-10-27 Jpmorgan Chase Bank, N.A. Method and system for monitoring non-occurring events
US9477495B2 (en) 2006-08-17 2016-10-25 International Business Machines Corporation Conservative class preloading for real time Java execution
US9594662B2 (en) * 2014-08-27 2017-03-14 Ca, Inc. Automated instrumentation of applications
US10241763B2 (en) * 2014-12-10 2019-03-26 Microsoft Technology Licensing, Llc. Inter-procedural type propagation for devirtualization

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09204300A (ja) * 1995-12-21 1997-08-05 Internatl Business Mach Corp <Ibm> オブジェクト指向アプリケーション用パッケージ化アルゴリズム
WO1998054633A1 (en) * 1997-05-29 1998-12-03 Sun Microsystems, Inc. Method and apparatus for signing and sealing objects

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5603031A (en) * 1993-07-08 1997-02-11 General Magic, Inc. System and method for distributed computation based upon the movement, execution, and interaction of processes in a network
US5966539A (en) * 1994-03-01 1999-10-12 Digital Equipment Corporation Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis
US6038395A (en) * 1994-12-16 2000-03-14 International Business Machines Corporation System and method for implementing proxy objects in a visual application builder framework
US5630066A (en) * 1994-12-20 1997-05-13 Sun Microsystems, Inc. System and method for locating object view and platform independent object
US5790861A (en) * 1995-07-07 1998-08-04 Sun Microsystems, Inc. Method and apparatus for generating executable code from object-oriented C++ source code
US5761673A (en) * 1996-01-31 1998-06-02 Oracle Corporation Method and apparatus for generating dynamic web pages by invoking a predefined procedural package stored in a database
WO1998037486A1 (en) * 1997-02-18 1998-08-27 International Business Machines Corporation Method for lookup of packages and classes in java, and devices making use of this method
JP3672207B2 (ja) * 1997-05-15 2005-07-20 松下電器産業株式会社 プログラム変換装置
US6230314B1 (en) * 1997-10-02 2001-05-08 International Business Machines Corporation Method and device for program transformation using class hierarchy transformation based upon type constraint analysis

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09204300A (ja) * 1995-12-21 1997-08-05 Internatl Business Mach Corp <Ibm> オブジェクト指向アプリケーション用パッケージ化アルゴリズム
WO1998054633A1 (en) * 1997-05-29 1998-12-03 Sun Microsystems, Inc. Method and apparatus for signing and sealing objects

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020032889A (ko) * 2000-10-27 2002-05-04 오길록 자바 클래스 파일 분석을 이용한 클래스 호출관계 표시 방법
US9317828B2 (en) 2007-02-28 2016-04-19 International Business Machines Corporation Facilitating provisioning in a mixed environment of locales
US10600014B2 (en) 2007-02-28 2020-03-24 International Business Machines Corporation Facilitating provisioning in a mixed environment of locales
US10817820B2 (en) 2007-02-28 2020-10-27 International Business Machines Corporation Facilitating provisioning in a mixed environment of locales

Also Published As

Publication number Publication date
US6526571B1 (en) 2003-02-25
EP1037141A2 (en) 2000-09-20
IL134133A0 (en) 2001-04-30
KR20010006750A (ko) 2001-01-26
EP1037141B1 (en) 2007-04-11
DE60034263D1 (de) 2007-05-24
ATE359546T1 (de) 2007-05-15
TW509871B (en) 2002-11-11
DE60034263T2 (de) 2007-12-20
IL134133A (en) 2003-10-31
EP1037141A3 (en) 2004-04-14

Similar Documents

Publication Publication Date Title
EP1037141B1 (en) Method for identifying calls in Java packages whose targets are guaranteed to belong to the same package
US6925638B1 (en) Mutability analysis in Java
Leroy Java bytecode verification: algorithms and formalizations
US6851112B1 (en) Virtual machine support for multiple applications
Leroy Java bytecode verification: an overview
Chan et al. Advanced obfuscation techniques for Java bytecode
US8104021B2 (en) Verifiable integrity guarantees for machine code programs
EP3170073B1 (en) Variable handles
Pusch Proving the soundness of a Java bytecode verifier specification in Isabelle/HOL
US11782774B2 (en) Implementing optional specialization when compiling code
AU4505801A (en) Language subset validation
US7730465B2 (en) Mixed types
Zaks et al. Sealed calls in Java packages
Paul et al. . NET security: lessons learned and missed from Java
US7458061B2 (en) Protecting object identity in a language with built-in synchronization objects
US20090070791A1 (en) Method for decoupling components of a software system at compile time and load time
Bartoletti et al. Stack inspection and secure program transformations
Biberstein et al. Sealing, Encapsulation, and Mutablility
Arnaud Towards first class references as a security infrastructure in dynamically-typed languages
Esmaeilsabzali et al. AEGIS: towards formalized and practical memory-safe execution of C programs via MSWASM
Thomas et al. Building a flexible Java runtime upon a flexible compiler
Bartoletti Language-based security: access control and static analysis
Pusch Proving the soundness of a Java bytecode verifier in Isabelle/HOL
Bartoletti et al. Method inlining in the presence of stack inspection
Bartoletti et al. Security-aware program transformations

Legal Events

Date Code Title Description
A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20040521