JPH11134198A - コンパイル処理装置、コンパイル処理方法、プログラム実行装置、プログラム実行方法及びプログラム記憶媒体 - Google Patents

コンパイル処理装置、コンパイル処理方法、プログラム実行装置、プログラム実行方法及びプログラム記憶媒体

Info

Publication number
JPH11134198A
JPH11134198A JP9298105A JP29810597A JPH11134198A JP H11134198 A JPH11134198 A JP H11134198A JP 9298105 A JP9298105 A JP 9298105A JP 29810597 A JP29810597 A JP 29810597A JP H11134198 A JPH11134198 A JP H11134198A
Authority
JP
Japan
Prior art keywords
program
initialization procedure
class
information
classes
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
JP9298105A
Other languages
English (en)
Other versions
JP3910701B2 (ja
Inventor
Yuji Watanabe
雄二 渡邉
Yukihiro Kimura
幸浩 木村
Kaname Mita
要 三田
Masakazu Hayashi
正和 林
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP29810597A priority Critical patent/JP3910701B2/ja
Priority to US09/181,927 priority patent/US6286136B1/en
Publication of JPH11134198A publication Critical patent/JPH11134198A/ja
Application granted granted Critical
Publication of JP3910701B2 publication Critical patent/JP3910701B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

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)

Abstract

(57)【要約】 【課題】本発明は、初期化手続きを持つ複数のクラスか
ら構成されるプログラムをコンパイルするコンパイル処
理装置に関し、プログラムの実行速度の向上の実現を目
的とする。 【解決手段】コンパイル対象のステートメントが初期化
手続きを必要とするときに、その初期化手続きを特定す
る特定手段16と、特定手段16の特定する初期化手続
きが他のクラスに影響を及ぼさないとみなしてよいもの
に該当するのかを判断する判断手段17と、判断手段1
7が該当する初期化手続きであることを判断するとき
に、コンパイル対象のステートメントを初期化手続きを
呼び出さない形に変更するとともに、その初期化手続き
を持つクラスに対して、その旨の情報を記録する変更手
段18とを備えるように構成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、初期化手続きを持
つ複数のクラスから構成されるプログラムをコンパイル
するコンパイル処理装置及び方法と、そのコンパイル処
理装置を実現するプログラムが記憶されるプログラム記
憶媒体と、初期化手続きを持つ複数のクラスから構成さ
れるプログラムを実行するプログラム実行装置及び方法
と、そのプログラム実行装置を実現するプログラムが記
憶されるプログラム記憶媒体とに関する。
【0002】近年のコンピュータシステムのプログラミ
ングの複雑化に伴って、言語仕様として、初期化を義務
ずけるものが多くなってきている。これは、プログラマ
が初期化を意識しなくても、初期化処理が行われること
によって、プログラムの誤りを減らそうという意図から
きている。
【0003】この初期化処理は、最初の一度だけ行えば
よいものであるが、それを保証するための機構によりプ
ログラムの実行速度が遅くなることが起こるので、この
問題点の解決を図ってプログラムの実行速度の向上を実
現していく必要がある。
【0004】
【従来の技術】オブジェクト指向プログラムなどのプロ
グラムでは、データと手続きとを備えるカプセル化され
た複数のクラスからプログラムが構成されている。
【0005】このクラスは、メッセージ通信によりデー
タ処理を実行するものであり、相互に、データの参照と
手続きの呼び出しとが可能になっている。更に、このク
ラスは、クラスイニシャライザと呼ばれる初期化手続き
を有しており、このクラスイニシャライザは、それに係
るデータが最初にアクセスされる前や、それに係る手続
きが最初に呼び出される前に、一度だけ起動されて初期
化処理を実行する。
【0006】このクラスイニシャライザの一度だけの起
動を保証するために、従来のコンパイラでは、クラスイ
ニシャライザを必要とするステートメントをコンパイル
するときに、そのクラスイニシャライザが既に起動済み
であるのか否かをチェックするIF文を挿入する構成を
採って、そのIF文により、既に起動されていることを
判断するときには、そのクラスイニシャライザを呼び出
さないように処理し、未だ起動されていないことを判断
するときには、そのクラスイニシャライザを呼び出すと
ともに、そのクラスイニシャライザを持つクラスに起動
済みを示すフラグを立てるように処理していた。
【0007】また、別の従来技術として、プログラム実
行中にクラスイニシャライザを含まない形にプログラム
を書き換えることで、クラスイニシャライザの一度だけ
の起動の保証を実現するという方法を採るものもあっ
た。
【0008】
【発明が解決しようとする課題】しかしながら、IF文
を挿入することで、クラスイニシャライザの一度だけの
起動を保証するという前者の従来技術に従っていると、
クラスイニシャライザの呼び出し回数の可能性が多いと
きには、その呼び出し毎に、IF文によるチェック処理
が行われることから、プログラムの実行速度が遅くなる
という問題点があった。
【0009】また、プログラム実行中にクラスイニシャ
ライザを含まない形にプログラムを書き換えることで、
クラスイニシャライザの一度だけの起動を保証するとい
う後者の従来技術に従っていると、インタプリンタのよ
うに翻訳処理と実行処理とを同時に行うような処理方式
の場合には有効であるものの、翻訳処理と実行処理とを
分離する処理方式の場合には、プログラムの中に自分自
身を書き換える仕組みを入れなければならないととも
に、その実行に要する時間によりプログラムの実行速度
が遅くなるという問題点があった。
【0010】本発明はかかる事情に鑑みてなされたもの
であって、初期化手続きを持つ複数のクラスから構成さ
れるプログラムをコンパイルする構成を採るときにあっ
て、プログラムの実行速度の向上を実現する新たなコン
パイル処理装置及び方法の提供と、そのコンパイル処理
装置を実現するプログラムが記憶される新たなプログラ
ム記憶媒体の提供とを目的とするとともに、初期化手続
きを持つ複数のクラスから構成されるプログラムを実行
する構成を採るときにあって、プログラムの実行速度の
向上を実現する新たなプログラム実行装置及び方法の提
供と、そのプログラム実行装置を実現するプログラムが
記憶される新たなプログラム記憶媒体の提供とを目的と
する。
【0011】
【課題を解決するための手段】図1に、本発明を具備す
るコンパイル処理装置10の原理構成、図2に、本発明
を具備するプログラム実行装置30の原理構成を図示す
る。
【0012】本発明のコンパイル処理装置10は、初期
化手続きを持つ複数のクラスから構成されるプログラム
をコンパイルするものであり、本発明のプログラム実行
装置30は、本発明のコンパイル処理装置10のコンパ
イルしたプログラムを実行するものである。
【0013】本発明のコンパイル処理装置10は、ソー
スプログラムを中間テキストに変換するフロントエンド
部11と、フロントエンド部11の後段に展開されて、
初期化手続きを必要とするステートメントについての変
更処理を実行する初期化処理部12と、初期化処理部1
2の後段に展開されて、コンパイル処理の最適化を行う
最適化部13と、最適化部13の後段に展開されて、オ
ブジェクトコードを生成するコード生成部14とを備え
る。
【0014】この初期化処理部12は、取出手段15
と、特定手段16と、判断手段17と、変更手段18
と、記録手段19と、管理手段20と、登録手段21
と、入手手段22と、除外手段23とを備える。
【0015】取出手段15は、中間テキストに変換され
たコンパイル対象のステートメントを1つずつ順番に取
り出す。特定手段16は、取出手段15の取り出すステ
ートメントの必要とする初期化手続きを特定する。判断
手段17は、特定手段16の特定する初期化手続きが副
作用を持つのか否かを判断する。
【0016】変更手段18は、判断手段17が副作用を
持たない初期化手続きであることを判断するときに、そ
の初期化手続きを必要とするステートメントがその初期
化手続きを呼び出さない形になるようにとそのステート
メントを変更するとともに、その初期化手続きを持つク
ラスにその旨の情報を記録する。
【0017】記録手段19は、変更手段18に代わり、
各初期化手続きが他のクラスに影響を及ぼさないとみな
してよいのかを判断して、みなしてよいと判断する初期
化手続きを持つクラスに対して、その旨の情報を記録す
る。
【0018】管理手段20は、副作用を持つ初期化手続
きの属性情報を管理する。登録手段21は、対話処理に
従って、管理手段20にデータを登録する。入手手段2
2は、初期化手続きの実行回数情報を入手する。除外手
段23は、規定の初期化手続きを判断手段17の処理対
象から外す。
【0019】ここで、本発明のコンパイル処理装置10
の持つ機能は具体的にはプログラムで実現されるもので
あり、このプログラムは、フロッピィディスクなどに記
憶されたり、サーバなどのディスクなどに記憶され、そ
れらからコンパイル処理装置10にインストールされて
メモリ上で動作することで、本発明を実現することにな
る。
【0020】一方、本発明のプログラム実行装置30
は、本発明のコンパイル処理装置10のコンパイルした
プログラム(複数のクラスから構成される)を展開する
メモリ31と、メモリ31に展開されるクラスの管理を
実行するクラス管理機構32とを備える。
【0021】このクラス管理機構32は、判断手段33
と、起動手段34とを備える。判断手段33は、メモリ
31に展開される各クラスに、本発明のコンパイル処理
装置10の記録する情報(変更手段18や記録手段19
の記録する情報)が記録されているのか否かを判断す
る。起動手段34は、プログラムの実行に先立って、ク
ラスの持つ初期化手続きを起動する。
【0022】ここで、本発明のプログラム実行装置30
の持つ機能は具体的にはプログラムで実現されるもので
あり、このプログラムは、フロッピィディスクなどに記
憶されたり、サーバなどのディスクなどに記憶され、そ
れらからプログラム実行装置30にインストールされて
メモリ上で動作することで、本発明を実現することにな
る。
【0023】このように構成される本発明のコンパイル
処理装置10では、取出手段15がコンパイル対象のス
テートメントを1つ取り出すと、特定手段16は、その
取り出されたステートメントがクラスの持つ初期化手続
きを必要とするのか否かをチェックして、必要とすると
きには、その初期化手続きを特定する。
【0024】この特定手段16の特定結果を受けて、判
断手段17は、管理手段20の管理する属性情報を持つ
か持たないかをチェックすることで、その特定された初
期化手続きが他のクラスに影響を及ぼさないとみなして
よいものに該当するのかを判断する。これに該当する初
期化手続きは、副作用を持たないものとして扱われるこ
とになる。
【0025】この判断手段17の判断結果を受けて、変
更手段18は、副作用を持たない初期化手続きであるこ
とを判断されるものについては、その初期化手続きを必
要とするステートメントがその初期化手続きを呼び出さ
ない形になるようにとそのステートメントを変更すると
ともに、その初期化手続きを持つクラスにその旨の情報
を記録する。
【0026】このとき、除外手段23は、入手手段22
の入手する実行回数情報に従って、特定手段16の特定
する初期化手続きが実行の可能性の少ないものであると
判断されるときには、本発明の処理対象とするまでもな
いので、その初期化手続きを判断手段17の処理対象か
ら外す。
【0027】一方、このように構成される本発明のプロ
グラム実行装置30では、メモリ31に展開されるプロ
グラムの実行が指示されると、判断手段33は、メモリ
31に展開される各クラスに、本発明のコンパイル処理
装置10の記録する情報が記録されているのか否かを判
断して、記録されていることを判断するときには、その
記録されている初期化手続きの実行が指示されていると
判断する。
【0028】この判断手段33の判断結果を受けて、起
動手段34は、プログラムの実行に先立って、判断手段
33により初期化手続きの実行を指示する情報が記録さ
れていると判断されるクラスの持つ初期化手続きを起動
対象として、プログラムの実行に先立って、それらの初
期化手続きを起動する。
【0029】このように、本発明では、クラスの持つ初
期化手続きの内、副作用のないものについては、プログ
ラムの実行に先立って起動してしまう構成を採るととも
に、その副作用のない初期化手続きを必要とするステー
トメントがその初期化手続きを呼び出さないようにする
構成を採ることで、IF文を使わずに、クラスの持つ初
期化手続きの一度だけの起動を保証することを実現す
る。これによりプログラムの実行速度を向上できるよう
になる。
【0030】
【発明の実施の形態】以下、実施の形態に従って本発明
を詳細に説明する。図3に、本発明のコンパイル処理装
置10の一実施例を図示する。
【0031】この実施例に示すように、本発明のコンパ
イル処理装置10は、ソースファイル43に格納される
ソースプログラムをコンパイルしてオブジェクトファイ
ル44に格納するコンパイラ40と、コンパイラ40の
コンパイル処理に必要となる情報を管理する副作用判断
テーブル41と、端末45を介してプログラマと対話す
ることで、副作用判断テーブル41に情報を登録するテ
ーブルデータ登録プログラム42とを備える。
【0032】このコンパイラ40のコンパイル対象とな
るプログラムは、図4に示すように、複数のクラス50
から構成され、これらの各クラス50は、データと手続
きとを有してカプセル化され、相互に、データの参照と
手続きの呼び出しとが可能になっている。そして、各ク
ラス50は、クラスイニシャライザ51と呼ばれる初期
化手続きを有している。このクラスイニシャライザ51
は、それに係るデータが最初にアクセスされる前や、そ
れに係る手続きが最初に呼び出される前に、一度だけ起
動されて初期化処理を実行する。
【0033】これらのクラス50の中のいずれかのクラ
ス50に、メインプログラム52が展開され、このメイ
ンプログラム52は、必要に応じて他のクラス50に処
理要求のメッセージを送信するとともに、その処理結果
を受け取ることで規定のデータ処理を実行する。
【0034】クラス50に展開されるクラスイニシャラ
イザ51は、他のクラス50に影響を及ぼす場合と、影
響を及ぼさない場合とがあり、副作用判断テーブル41
は、他のクラス50に影響を及ぼすクラスイニシャライ
ザ51の持つ属性情報を管理する。
【0035】例えば、クラスイニシャライザ51が外部
へのポインタを使用している場合や、外部変数を使用し
ている場合や、外部呼び出しを行っている場合には、他
のクラス50に影響を及ぼすことになる。副作用判断テ
ーブル41は、このような属性情報を管理するのであ
る。
【0036】この実施例では、コンパイラ40のコンパ
イル対象となるプログラムとして、Java(Sun Microsys
tems,Incの開発したプログラム言語)を想定している。
これから、副作用判断テーブル41は、図5に示すよう
に、自クラス50以外のクラス50の持つデータをアク
セスしている場合には、他のクラス50に影響を及ぼす
クラスイニシャライザ51であり、自クラス50以外の
クラス50の持つ手続きを呼び出している場合には、他
のクラス50に影響を及ぼすクラスイニシャライザ51
であるというような属性情報を管理することになる。
【0037】後述することから分かるように、この副作
用判断テーブル41に登録されていない属性情報を持つ
クラスイニシャライザ51は、たとえ、他のクラス50
に影響を及ぼすものであっても、他のクラス50に影響
を及ぼさないものとして扱われることになる。
【0038】これから、テーブルデータ登録プログラム
42は、プログラマと対話することで、副作用判断テー
ブル41に属性情報を登録するときに、他のクラス50
に影響を及ぼす可能性があっても、その可能性が極めて
小さいものとなる属性情報については、その登録を省略
することで、その属性情報を持つクラスイニシャライザ
51については、他のクラス50に影響を及ぼさないも
のとして扱うようにすることが可能である。
【0039】また、後述することから分かるように、他
のクラス50に影響を及ぼす可能性があるクラスイニシ
ャライザ51を影響のないものとして扱う構成を採る
と、プログラムエラーが発生する可能性はあるものの、
プログラムの実行速度が向上することになる。
【0040】この点を考慮して、テーブルデータ登録プ
ログラム42は、図6に示すように、副作用判断テーブ
ル41に対して、属性情報に対応付けて他のクラス50
への影響度合いを示すレベル情報を登録することで、プ
ログラムエラーの発生とプログラムの実行速度の向上と
の兼ね合いを図る構成を採ることがある。
【0041】図7及び図8に、本発明を実現するために
コンパイラ40が実行する処理フローの一実施例を図示
する。次に、この処理フローに従って、本発明のコンパ
イル処理装置10の実行する処理について詳細に説明す
る。
【0042】コンパイラ40は、ソースファイル43に
格納されるソースプログラムのコンパイル要求がある
と、そのプログラムを構成するクラスを順番に1つずつ
選択して、図7及び図8の処理フローを実行することで
コンパイル処理を実行する。
【0043】すなわち、コンパイラ40は、コンパイル
対象のクラスを選択すると、図7及び図8の処理フロー
に示すように、先ず最初に、ステップ1で、そのクラス
のソースプログラム(Javaで言うバイトコード)をソー
スファイル43から読み出して中間テキストに変換す
る。
【0044】続いて、ステップ2で、先頭からの順番に
従って未処理の中間テキストを1つ取り出し、続くステ
ップ3で、全ての中間テキストの取り出しを終了したの
か否かを判断する。
【0045】このステップ3で、全ての中間テキストの
取り出しを終了していないことを判断するとき、すなわ
ち、ステップ2で未処理の中間テキストを選択できたこ
とを判断するときには、ステップ4に進んで、その中間
テキストがクラスイニシャライザ51を必要としている
のか否かを判断する。この判断処理は、中間テキストの
種別を判断することで行われる。
【0046】例えば、Javaの「getstatic 」や「putsta
tic 」といった命令は、クラスイニシャライザ51の動
く可能性のあることが文法で決められているので、この
命令を持つ中間テキストについては、クラスイニシャラ
イザ51を必要としていると判断することになる。
【0047】このステップ4で、中間テキストがクラス
イニシャライザ51を必要としていないことを判断する
ときには、次の中間テキストの処理に進むべく、ステッ
プ2に戻る。
【0048】一方、ステップ4で、中間テキストがクラ
スイニシャライザ51を必要としていることを判断する
ときには、ステップ5に進んで、必要としているクラス
イニシャライザ51がどのクラス50のものであるのか
を見つける。この特定処理は、コンパイラ40の持つシ
ンボルテーブルを参照することで実行される。
【0049】Javaのバイトコードのオペランドには、そ
のシンボルテーブルのエントリー位置を指すインデック
スが入っているので、このインデックスを使ってシンボ
ルテーブルを参照することで、必要としているクラスイ
ニシャライザ51を持つクラス50を見つけることがで
きる。例えば、「getstatic #8」の指すシンボルテー
ブルのエントリー位置から、必要としているクラスイニ
シャライザ51がクラスa(a.class)の持つクラスイニ
シャライザ51であることを見つけるのである。
【0050】ステップ5で、中間テキストの必要として
いるクラスイニシャライザ51を持つクラス50を見つ
けると、続いて、ステップ6で、そのクラス50に、そ
のクラスイニシャライザ51の副作用の有無情報が記録
されているのか否かをチェックする。この副作用の有無
情報の記録は、後述するステップ8/ステップ10で記
録するものであるが、既に、別のクラス50をコンパイ
ルするときや、同一のクラス50の別の中間テキストを
コンパイルするときに記録している可能性があるので、
このステップ6では、既に記録しているのか否かをチェ
ックするのである。
【0051】このステップ6で、副作用の有無情報が記
録されていないことを判断するときには、ステップ7に
進んで、中間テキストの必要としているクラスイニシャ
ライザ51が副作用を持つのか否かを判断する。この判
断処理は、副作用判断テーブル41を参照することで行
う。
【0052】すなわち、副作用判断テーブル41には、
他のクラス50に影響を及ぼすクラスイニシャライザ5
1の持つ属性情報が管理されているので、この属性情報
を持つクラスイニシャライザ51であるのか否かを判断
して、属性情報を持つことを判断するときには、副作用
を持つクラスイニシャライザ51と判断し、属性情報を
持たないことを判断するときには、副作用を持たないク
ラスイニシャライザ51と判断することで行う。
【0053】このとき、副作用判断テーブル41が、図
6に示すように、属性情報に対応付けて他のクラス50
への影響度合いを示すレベル情報を管理することがあ
り、このとき、プログラマから、レベル情報が指定され
ることがあるので、そのときには、指定されるレベル情
報の規定する属性情報(最も副作用の大きいレベルから
指定されるレベルまでの属性情報)を使って判断処理を
実行することになる。
【0054】このステップ7で、中間テキストの必要と
しているクラスイニシャライザ51が副作用を持たない
ことを判断するときには、ステップ8に進んで、そのク
ラスイニシャライザ51を持つクラス50に、自クラス
50の持つクラスイニシャライザ51が副作用を持たな
いことを記録し、続くステップ9で、その中間テキスト
がそのクラスイニシャライザ51を呼び出さない形にな
るようにとその中間テキストのコードを変更する。そし
て、次の中間テキストの処理に進むべく、ステップ2に
戻る。
【0055】一方、ステップ7で、中間テキストの必要
としているクラスイニシャライザ51が副作用を持つこ
とを判断するときには、ステップ10に進んで、そのク
ラスイニシャライザ51を持つクラス50に、自クラス
50の持つクラスイニシャライザ51が副作用を持つこ
とを記録してから、そのまま、次の中間テキストの処理
に進むべく、ステップ2に戻る。
【0056】一方、ステップ6で、中間テキストの必要
としているクラスイニシャライザ51を持つクラス50
に、副作用の有無情報が記録されていることを判断する
ときには、ステップ7の判断処理を実行するまでもない
ので、ステップ11に進んで、その記録される副作用の
有無情報から、そのクラスイニシャライザ51が副作用
を持つのか否かを判断する。
【0057】そして、このステップ11で、中間テキス
トの必要としているクラスイニシャライザ51が副作用
を持たないことを判断するときには、ステップ12(図
8の処理フロー)に進んで、その中間テキストがそのク
ラスイニシャライザ51を呼び出さない形になるように
とその中間テキストのコードを変更してから、次の中間
テキストの処理に進むべくステップ2に戻り、一方、副
作用を持つことを判断するときには、そのまま、次の中
間テキストの処理に進むべくステップ2に戻る。
【0058】このようにして、必要に応じて中間コード
の変更処理を実行していくことで、ステップ3で、コン
パイル対象のクラス50の持つ全中間テキストについて
の処理終了を判断すると、ステップ13(図8の処理フ
ロー)に進んで、そのコンパイル対象のクラス50に、
そのクラス50の持つクラスイニシャライザ51の副作
用の有無情報が記録されているのか否かをチェックす
る。
【0059】このステップ13で、副作用の有無情報が
記録されていないことを判断するときには、ステップ1
4に進んで、上述したステップ7と同一の処理を実行す
ることで、コンパイル対象のクラス50の持つクラスイ
ニシャライザ51が副作用を持つのか否かを判断して、
副作用を持たないことを判断するときには、ステップ1
5に進んで、そのクラス50に、自クラス50の持つク
ラスイニシャライザ51が副作用を持たないことを記録
し、一方、副作用を持つことを判断するときには、ステ
ップ16に進んで、そのクラス50に、自クラス50の
持つクラスイニシャライザ51が副作用を持つことを記
録する。
【0060】そして、ステップ15/ステップ16の処
理を終了するか、ステップ13で、副作用の有無情報が
記録されていることを判断すると、ステップ17に進ん
で、コンパイルの最適化処理を行い、続くステップ18
で、コード生成処理を行うことで、コンパイル対象のク
ラス50のオブジェクトコードを生成して処理を終了す
る。
【0061】コンパイラ40は、各クラス50に対し
て、この図7及び図8の処理フローを実行することでコ
ンパイル処理を実行する。このようにして、本発明のコ
ンパイラ40は、副作用を持たないクラスイニシャライ
ザ51を必要とする中間テキストについては、その中間
テキストがそのクラスイニシャライザ51を呼び出さな
い形になるようにとその中間テキストのコードを変更し
ていくとともに、そのクラスイニシャライザ51を持つ
クラス50に、そのクラスイニシャライザ51が副作用
を持たない旨の情報を記録していくように処理するので
ある。
【0062】ここで、図7及び図8の処理フローでは、
コンパイラ40は、クラスイニシャライザ51が副作用
を持つのか否かを検出し、その検出結果に応じて中間テ
キストの変更処理を実行していくときに、それと同期を
とって、その検出結果をクラス50に記録していく構成
を採ったが、中間テキストの変更処理とは全く切り離し
て、その変更処理の前あるいは後に、各クラス50の持
つクラスイニシャライザ51が副作用を持つのか否かを
検出して、それをクラス50に記録していく構成を採る
ことも可能である。
【0063】次に、本発明のコンパイル処理装置10の
コンパイルしたプログラムを実行する、本発明のプログ
ラム実行装置30の実施例について説明する。図9に、
この本発明のプログラム実行装置30の一実施例を図示
する。
【0064】この実施例に示すように、本発明のプログ
ラム実行装置30は、本発明のコンパイル処理装置10
のコンパイルしたプログラムを入手して主記憶61に格
納する入手プログラム60と、主記憶61に格納される
複数のクラス50で構成されるプログラムの管理処理を
実行するクラス管理プログラム62とを備える。
【0065】このクラス管理プログラム62は、Mainか
ら開始されるプログラムを制御することでデータ処理を
実行するクラス制御プログラム63と、本発明を実現す
べく設けられて、クラス50の持つクラスイニシャライ
ザ51の起動処理を実行するクラスイニシャライザ起動
プログラム64とを備える。
【0066】図10に、クラスイニシャライザ起動プロ
グラム64の実行する処理フローの一実施例を図示す
る。次に、この処理フローに従って、本発明のプログラ
ム実行装置30の実行する処理について詳細に説明す
る。
【0067】クラスイニシャライザ起動プログラム64
は、クラス制御プログラム63に対してプログラムの起
動要求が発行されると、図10の処理フローに示すよう
に、先ず最初に、ステップ1で、主記憶61に格納され
るクラス50の中から未処理のものを1つ取り出し、続
くステップ2で、全てのクラス50の取り出しを終了し
たのか否かを判断する。
【0068】このステップ2で、全てのクラス50の取
り出しを終了していないことを判断するとき、すなわ
ち、ステップ1で未処理のクラス50を選択できたこと
を判断するときには、ステップ3に進んで、その取り出
したクラス50に記録される副作用の有無情報を読み出
す。すなわち、上述したように、本発明のコンパイル処
理装置10によりコンパイルされると、クラスイニシャ
ライザ51が副作用を持つのか否かを示す情報がクラス
50に記録されることになるので、この副作用の有無情
報を読み出すのである。
【0069】続いて、ステップ4で、ステップ3で読み
出した副作用の有無情報が副作用無しを表示しているの
か否かを判断し、副作用の有りを表示していることを判
断するときには、次のクラス50の処理に進むべくステ
ップ1に戻り、副作用の無しを表示していることを判断
するときには、ステップ5に進んで、ステップ1で取り
出したクラス50の持つクラスイニシャライザ51を起
動してから、次のクラス50の処理に進むべくステップ
1に戻る。
【0070】そして、ステップ2で、全てのクラス50
の取り出しの終了を判断すると、ステップ6に進んで、
クラス制御プログラム63に制御を渡すことでMainに制
御を渡して処理を終了する。
【0071】このようにして、本発明のクラスイニシャ
ライザ起動プログラム64は、本発明のコンパイル処理
装置10により検出される副作用を持たないクラスイニ
シャライザ51については、プログラムの実行に先立っ
て起動してしまうように処理するのである。
【0072】このように、本発明では、クラスイニシャ
ライザ51の内、副作用のないものについては、プログ
ラムの実行に先立って起動してしまう構成を採るととも
に、その副作用のないクラスイニシャライザ51を必要
とするプログラム部分がそのクラスイニシャライザ51
を呼び出さないようにする構成を採ることで、IF文を
使わずに、クラスイニシャライザ51の一度だけの起動
の保証を実現するのである。
【0073】次に、具体的なJavaのプログラムに従っ
て、本発明について更に詳細に説明する。図11に示す
ようなクラスaとクラスbとで構成されるプログラムを
想定する。
【0074】このクラスaは、Mainのプログラム部分
で、クラスbで定義する変数iの値の1つインクリメン
トして、それをクラスbに書き戻すという処理を行う。
また、”START”という文字列を表示するというク
ラスイニシャライザ51(CI)を持っている。
【0075】一方、クラスbは、変数iは他のクラス5
0から参照可能な変数であることを定義するとともに、
変数iをプリントするという処理を行う。また、変数i
をゼロにリセットするというクラスイニシャライザ51
(CI)を持っている。
【0076】なお、「static()」という名前がクラス
イニシャライザ51であることを示している。このプロ
グラムを受け取ると、コンパイラ40は、図12に示す
ようなクラスaの中間テキストを生成するとともに、図
13に示すようなクラスbの中間テキストを生成する。
【0077】図12に示すクラスaの中間テキストにつ
いて説明するならば、「getstatic#8」を使ってシン
ボルテーブルにアクセスすることで、クラスbから変数
iの値を取り込めばよいことが分かる。また、「putsta
tic #8」を使ってシンボルテーブルにアクセスするこ
とで、クラスbの変数iに値を書き込めばよいことが分
かる。また、「invokestatic#10」を使ってシンボルテ
ーブルにアクセスすることで、「print ()」という手
続きの詳細を得ることができる。また、「getstatic #
9」を使ってシンボルテーブルにアクセスすることで、
出力先がどこであるかが分かる。また、「ldc #1」を
使ってシンボルテーブルにアクセスすることで、出力す
る文字列が分かる。また、「invokevirtual #11」を使
ってシンボルテーブルにアクセスすることで、「printl
n ()」という手続きの詳細を得ることができる。
【0078】また、図13に示すクラスbの中間テキス
トについて説明するならば、「getstatic #7」を使っ
てシンボルテーブルにアクセスすることで、出力先がど
こになるかが分かる。また、「getstatic #6」を使っ
てシンボルテーブルにアクセスすることで、変数iの値
を取り込めばよいことが分かる。また、「invokevirtua
l #8」を使ってシンボルテーブルにアクセスすること
で、「println ()」という手続きの詳細を得ることが
できる。また、「putstatic #6」を使ってシンボルテ
ーブルにアクセスすることで、変数iにゼロを書き込め
ばよいことが分かる。
【0079】コンパイル40は、各クラス50の持つク
ラスイニシャライザ51が副作用を持つか否かを判断す
る。クラスaの持つクラスイニシャライザ51について
は、「invokevirtual #11」という中間テキストを持
ち、この「invokevirtual 」は他のクラス50をアクセ
スする可能性があるので、副作用を持つと判断する。一
方、クラスbの持つクラスイニシャライザ51について
は、副作用を持たない「iconst 0」/「return」とい
う中間テキストと、自クラスaをアクセスすることで副
作用を持たない「putstatic 」という中間テキストとを
持つので、副作用を持たないと判断する。
【0080】コンパイラ40は、中間テキストをコンパ
イルしていくときに、副作用を持たないクラスイニシャ
ライザ51を必要とする中間テキストが見つかると、そ
の中間テキストがそのクラスイニシャライザ51を呼び
出さない形になるようにとその中間テキストのコードを
変更する。
【0081】この具体例の場合、クラスaがクラスbの
変数iを必要とし、変数iの値をゼロにリセットする処
理を行うクラスbのクラスイニシャライザ51は副作用
を持たないことから、変数iを必要とするクラスaの持
つ中間テキストがクラスbのクラスイニシャライザ51
を呼び出さない形になるようにと、その中間テキストの
コードを変更する。この変更に従って、図12に示した
クラスaの中間テキストは、クラスイニシャライザ51
の呼び出しを行わないことを指示する「quick」を使っ
て、図14の矢印に示すものに変更されることになる。
【0082】このようにして、図11に示したクラスa
とクラスbのソースプログラムは、図15に示すような
オブジェクトコードにコンパイルされることになる。こ
こで、図中に示す「a.Init flg =OFF」は、クラス
aのクラスイニシャライザ51が副作用を持つことを示
し、「b.Init flg =ON」は、クラスbのクラスイニ
シャライザ51が副作用を持たないことを示している。
【0083】図中のα部分のプログラムは、クラスイニ
シャライザ起動プログラム64の実行用に生成されるプ
ログラムであり、クラスイニシャライザ起動プログラム
64は、このプログラムに従って、クラスaの持つ「a.
Init flg 」に副作用を持たない旨を示すONが設定さ
れているときには、プログラムの実行前に、クラスaの
持つクラスイニシャライザ51を起動するとともに、ク
ラスbの持つ「b.Init flg 」に副作用を持たない旨を示
すONが設定されているときには、プログラムの実行前
に、クラスbの持つクラスイニシャライザ51を起動す
る。この起動処理に従って、クラスbの持つクラスイニ
シャライザ51がプログラムの実行前に起動されること
になる。
【0084】このようにして、本発明によれば、IF文
を使わずに、クラス50の持つクラスイニシャライザ5
1の一度だけの起動を保証できるようになる。これに対
して、従来技術では、図16に示すように、IF文を使
うことで、クラスイニシャライザ51が既に起動済みで
あるのか否かをチェックする構成を採って、既に起動さ
れていることを判断するときには、そのクラスイニシャ
ライザ51を呼び出さないように処理し、未だ起動され
ていないことを判断するときには、そのクラスイニシャ
ライザ51を呼び出すとともに、そのクラスイニシャラ
イザ51に起動済みを示すフラグを立てるように処理す
るという構成を採っているので、その都度IF文による
チェック処理が行われることで、プログラムの実行速度
が遅くなるという問題点があった。
【0085】以上に説明した実施例では、基本的に、全
てのクラスイニシャライザ51を処理対象とする構成を
採ったが、実行の可能性の少ないクラスイニシャライザ
51については処理対象から外すことで、コンパイル時
間の短縮を図る方法を採ることも可能である。
【0086】例えば、プロファイル結果などを参考にし
て、実行の可能性の少ないクラスイニシャライザ51を
特定し、それを処理対象から外すと、コンパイル時間の
短縮が図られることになる。実行の可能性の少ないクラ
スイニシャライザ51については、実行される可能性が
少ないので、IF文を挿入する従来技術に従ってもプロ
グラムの実行速度に与える影響が殆どなく、実質的に問
題とならないからである。
【0087】図示実施例に従って本発明を説明したが、
本発明はこれに限定されるものではない。例えば、実施
例に言うクラスとは、オブジェクト指向プログラムに言
うクラスに限られるものではなくて、広い意味でのカプ
セル化されたものを言うものである。
【0088】
【発明の効果】以上説明したように、本発明では、クラ
スイニシャライザを持つ複数のクラスから構成されるプ
ログラムを使ってデータ処理を実行する構成を採るとき
にあって、クラスの持つクラスイニシャライザの内、副
作用のないものについては、プログラムの実行に先立っ
て起動してしまう構成を採るとともに、その副作用のな
いクラスイニシャライザを必要とするプログラム部分が
そのクラスイニシャライザを呼び出さないようにする構
成を採ることで、IF文を使わずに、クラスイニシャラ
イザの一度だけの起動を保証できるようになる。これに
よりプログラムの実行速度を向上できるようになる。
【図面の簡単な説明】
【図1】本発明の原理構成図である。
【図2】本発明の原理構成図である。
【図3】本発明の一実施例である。
【図4】コンパイル対象のプログラムの説明図である。
【図5】副作用判断テーブルの説明図である。
【図6】副作用判断テーブルの説明図である。
【図7】コンパイラの実行する処理フローである。
【図8】コンパイラの実行する処理フローである。
【図9】本発明の一実施例である。
【図10】クラスイニシャライザ起動プログラムの実行
する処理フローである。
【図11】本発明の処理説明図である。
【図12】本発明の処理説明図である。
【図13】本発明の処理説明図である。
【図14】本発明の処理説明図である。
【図15】本発明の処理説明図である。
【図16】従来技術の説明図である。
【符号の説明】
10 コンパイル処理装置 11 フロントエンド部 12 初期化処理部 13 最適化部 14 コード生成部 15 取出手段 16 特定手段 17 判断手段 18 変更手段 19 記録手段 20 管理手段 21 登録手段 22 入手手段 23 除外手段 30 プログラム実行装置 31 メモリ 32 クラス管理機構 33 判断手段 34 起動手段
───────────────────────────────────────────────────── フロントページの続き (72)発明者 三田 要 静岡県静岡市南町18番1号 株式会社富士 通静岡エンジニアリング内 (72)発明者 林 正和 神奈川県川崎市中原区上小田中4丁目1番 1号 富士通株式会社内

Claims (12)

    【特許請求の範囲】
  1. 【請求項1】 初期化手続きを持つ複数のクラスから構
    成されるプログラムをコンパイルするコンパイル処理装
    置において、 コンパイル対象のステートメントが初期化手続きを必要
    とするときに、該初期化手続きを特定する特定手段と、 上記特定手段の特定する初期化手続きが他のクラスに影
    響を及ぼさないとみなしてよいものに該当するのかを判
    断する判断手段と、 上記判断手段が該当する初期化手続きであることを判断
    するときに、上記ステートメントを該初期化手続きを呼
    び出さない形に変更する変更手段とを備えることを、 特徴とするコンパイル処理装置。
  2. 【請求項2】 請求項1記載のコンパイル処理装置にお
    いて、 変更手段は、判断手段が他のクラスに影響を及ぼさない
    とみなしてよいと判断する初期化手続きを持つクラスに
    対して、その旨の情報を記録することを、特徴とするコ
    ンパイル処理装置。
  3. 【請求項3】 請求項1記載のコンパイル処理装置にお
    いて、 各初期化手続きが他のクラスに影響を及ぼさないとみな
    してよいのかを判断して、みなしてよいと判断する初期
    化手続きを持つクラスに対して、その旨の情報を記録す
    る記録手段を備えることを、 特徴とするコンパイル処理装置。
  4. 【請求項4】 請求項1又は2記載のコンパイル処理装
    置において、 他のクラスに影響を及ぼす初期化手続きの持つ属性情報
    を管理する管理手段を備え、 判断手段は、上記管理手段の管理する属性情報を持つか
    持たないかをチェックすることで判断処理を実行するこ
    とを、 特徴とするコンパイル処理装置。
  5. 【請求項5】 請求項4記載のコンパイル処理装置にお
    いて、 管理手段は、属性情報に対応付けて他のクラスへの影響
    度合いを示すレベル情報を管理し、 判断手段は、指定されるレベル情報の規定する属性情報
    を使ってチェック処理を実行することを、 特徴とするコンパイル処理装置。
  6. 【請求項6】 請求項4又は5記載のコンパイル処理装
    置において、 対話処理に従って、管理手段にデータを登録する登録手
    段を備えることを、 特徴とするコンパイル処理装置。
  7. 【請求項7】 請求項1ないし6記載のコンパイル処理
    装置において、 初期化手続きの実行回数情報を入手する入手手段と、 上記入手手段の入手する実行回数情報に従って、特定手
    段の特定する初期化手続きが実行の可能性の少ないもの
    であると判断されるときに、該初期化手続きを判断手段
    の処理対象から外す除外手段とを備えることを、 特徴とするコンパイル処理装置。
  8. 【請求項8】 初期化手続きを持つ複数のクラスから構
    成されるプログラムをコンパイルするコンパイル処理方
    法において、 コンパイル対象のステートメントが初期化手続きを必要
    とするときに、該初期化手続きを特定する第1の処理過
    程と、 第1の処理過程で特定する初期化手続きが他のクラスに
    影響を及ぼさないとみなしてよいものに該当するのかを
    判断する第2の処理過程と、 第2の処理過程で該当する初期化手続きであることを判
    断するときに、上記ステートメントを該初期化手続きを
    呼び出さない形に変更する第3の処理過程とを備えるこ
    とを、 特徴とするコンパイル処理方法。
  9. 【請求項9】 初期化手続きを持つ複数のクラスから構
    成されるプログラムをコンパイルするコンパイル処理装
    置の実現に用いられるプログラムが記憶されるプログラ
    ム記憶媒体であって、 コンパイル対象のステートメントが初期化手続きを必要
    とするときに、該初期化手続きを特定する特定処理と、 上記特定処理の特定する初期化手続きが他のクラスに影
    響を及ぼさないとみなしてよいものに該当するのかを判
    断する判断処理と、 上記判断処理が該当する初期化手続きであることを判断
    するときに、上記ステートメントを該初期化手続きを呼
    び出さない形に変更する変更処理とをコンピュータに実
    行させるプログラムが記憶されることを、 特徴とするプログラム記憶媒体。
  10. 【請求項10】 初期化手続きを持つ複数のクラスから
    構成されるプログラムを実行するプログラム実行装置に
    おいて、 プログラムの実行が指示されるときに、各クラスに、初
    期化手続きの実行を指示する情報が記録されているのか
    否かを判断する判断手段と、 上記判断手段により初期化手続きの実行を指示する情報
    が記録されていると判断されるクラスの持つ初期化手続
    きを起動対象として、プログラムの実行に先立って、該
    初期化手続きを起動する起動手段とを備えることを、 特徴とするプログラム実行装置。
  11. 【請求項11】 初期化手続きを持つ複数のクラスから
    構成されるプログラムを実行するプログラム実行方法に
    おいて、 プログラムの実行が指示されるときに、各クラスに、初
    期化手続きの実行を指示する情報が記録されているのか
    否かを判断する第1の処理過程と、 第1の処理過程により初期化手続きの実行を指示する情
    報が記録されていると判断されるクラスの持つ初期化手
    続きを起動対象として、プログラムの実行に先立って、
    該初期化手続きを起動する第2の処理過程とを備えるこ
    とを、 特徴とするプログラム実行方法。
  12. 【請求項12】 初期化手続きを持つ複数のクラスから
    構成されるプログラムを実行するプログラム実行装置の
    実現に用いられるプログラムが記憶されるプログラム記
    憶媒体であって、 プログラムの実行が指示されるときに、各クラスに、初
    期化手続きの実行を指示する情報が記録されているのか
    否かを判断する判断処理と、 上記判断処理により初期化手続きの実行を指示する情報
    が記録されていると判断されるクラスの持つ初期化手続
    きを起動対象として、プログラムの実行に先立って、該
    初期化手続きを起動する起動処理とをコンピュータに実
    行させるプログラムが記憶されることを、特徴とするプ
    ログラム記憶媒体。
JP29810597A 1997-10-30 1997-10-30 コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 Expired - Fee Related JP3910701B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP29810597A JP3910701B2 (ja) 1997-10-30 1997-10-30 コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体
US09/181,927 US6286136B1 (en) 1997-10-30 1998-10-29 Compile processing apparatus and method and program executing apparatus and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP29810597A JP3910701B2 (ja) 1997-10-30 1997-10-30 コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体

Publications (2)

Publication Number Publication Date
JPH11134198A true JPH11134198A (ja) 1999-05-21
JP3910701B2 JP3910701B2 (ja) 2007-04-25

Family

ID=17855231

Family Applications (1)

Application Number Title Priority Date Filing Date
JP29810597A Expired - Fee Related JP3910701B2 (ja) 1997-10-30 1997-10-30 コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体

Country Status (2)

Country Link
US (1) US6286136B1 (ja)
JP (1) JP3910701B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012018786A (ja) * 2010-07-07 2012-01-26 Dainippon Screen Mfg Co Ltd 電池用電極の製造方法、電池の製造方法、電池、車両および電子機器

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6430739B1 (en) * 1999-07-16 2002-08-06 Acceleration Software International Corporation Software execution contingent on home page setting
JP3640081B2 (ja) * 1999-12-27 2005-04-20 日本電気株式会社 Mpiプログラムのコンパイルにおける最適化方法
US7577951B2 (en) * 2002-05-30 2009-08-18 Hewlett-Packard Development Company, L.P. Performance of computer programs while they are running
GB0325553D0 (en) * 2003-11-01 2003-12-03 Ibm Method and apparatus for activating/deactivating run-time determined software routines in Java compiled bytecode applications
US20060288336A1 (en) * 2005-06-21 2006-12-21 Microsoft Corporation Module initialization

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0695312B2 (ja) * 1991-11-21 1994-11-24 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータプログラムを処理する方法およびシステム
JP2000503785A (ja) * 1994-12-13 2000-03-28 ノベル,インコーポレイテッド ネットワークディレクトリを更新または変更するための方法ならびにその装置
US6085034A (en) * 1996-03-18 2000-07-04 International Business Machines Corporation Constructor based object initialization with overrides

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012018786A (ja) * 2010-07-07 2012-01-26 Dainippon Screen Mfg Co Ltd 電池用電極の製造方法、電池の製造方法、電池、車両および電子機器

Also Published As

Publication number Publication date
JP3910701B2 (ja) 2007-04-25
US6286136B1 (en) 2001-09-04

Similar Documents

Publication Publication Date Title
KR100712767B1 (ko) 컴파일된 코드에서 동적 클래스 초기화 검사의 비용을 줄이기 위한 컴퓨터 시스템의 명령어 컴파일 방법 및 그 컴퓨터 판독가능 매체
US6093216A (en) Method of run-time tracking of object references in Java programs
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
US6363522B1 (en) Method and apparatus for handling exceptions as normal control flow
JPH0836488A (ja) ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置
US7124407B1 (en) Method and apparatus for caching native code in a virtual machine interpreter
US7467376B2 (en) Semantic analysis based compression of interpreted code by replacing object instruction groups with special instruction specifying a register representing the object
US7086044B2 (en) Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
JP2001022591A (ja) コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
US6519768B1 (en) Instruction translation method
US6625807B1 (en) Apparatus and method for efficiently obtaining and utilizing register usage information during software binary translation
US5854928A (en) Use of run-time code generation to create speculation recovery code in a computer system
US6895579B2 (en) Method and apparatus for maintaining exception reporting for register promotion
JPH11134198A (ja) コンパイル処理装置、コンパイル処理方法、プログラム実行装置、プログラム実行方法及びプログラム記憶媒体
JP2919302B2 (ja) Cpuシミュレーション方法
JP2817786B2 (ja) シミュレーション装置及びシミュレーション方法
WO2007074469A2 (en) Method and system for compiling a source code
US7353163B2 (en) Exception handling method and apparatus for use in program code conversion
JP2003114809A (ja) シミュレーション装置及びシミュレーション方法
JP2000047879A (ja) コンパイル方法及び装置、実行方法、及びプログラム実行装置
US6954926B1 (en) Label address translating device
US20240134666A1 (en) Hybrid just in time load module compiler with performance optimizations
JP2008102748A (ja) プログラム実行方法、言語処理系、及び実行時ルーチン
KR100258095B1 (ko) 칠에서의 초기화되지 않은 이름의 발견방법
EP1033651B1 (en) Instruction translation method

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060908

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060919

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061116

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070125

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110202

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110202

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120202

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees