National Institute of Advanced Industrial Science and Technology (AIST) This page is a page of the former research institute. We stopped updating on March 31.2001.
E-mail to webmaster (Japanese) E-mail to webmaster (English)

ベンチマークプログラムの実行結果

ベンチマークプログラムには、fib 25、およびtak 18 12 6を用いた。参考までに、Kawa とJavaで直接 プログラムを書いた場合での実験結果も、述べる。

実験環境

機種
SPARC server 20
OS
Solaris 2.4
JavaVM
JDK1.1beta

実験結果

実験結果(単位:秒)
Java Kawa JavaLisp
fib 25 1.2 56.1 117.2
tak 18 12 6 0.8 15.8 50.2

実験では、JavaLispはインタプリタであり,他はコンパイラであるので,単純 な比較検討はできない.しかし,JavaLispはJavaで直接記述した場合に比べて 100倍程度時間がかかっているので,原因を考えてみる.

Javaでは,数値もオブジェクトで表現されるので,実験で行なったようなベン チマークプログラムでは,大量のメモリを消費し,そのほとんどがゴミとなる. 頻繁に使われるある範囲(例えば-1から100)をあらかじめ,アロケートしてメ モリを節約するという手法もあるが,JavaLispでは実装されていない.一方 Javaでは,数値は直値で表されるので,ゴミは発生しない.JavaLispではオブ ジェクトの割付けとゴミ集めのオーバーヘッド頻繁にかかっているものと思わ れる.KawaがJavaLispより遅かったのも同様の理由である.

この直値を使えないという欠点は,実行時間の大きなオーバヘッドとなってお り,たとえJavaLispにコンパイラを追加しても,Javaで直接記述したプログラ ムをコンパイルした場合より高速なコードを生成することは,不可能であると 考えられる.

一方,Kawaはコンパイラでの実験であり,JavaLispはインタプリタである.こ の差が2倍程度しかなかったのは,Kawaは高度な最適化を行ってないなどの理 由が考えられる.


プログラム

fib 25

(defun fib (n)
  (if (<= n 1)
      1
    (+ (fib (- n 2)) (fib (1- n)))))
(fib 25)

tak 18 12 6

(defun tak (x y z)
  (if (not (< y x))
      z
    (tak
     (tak (1- x) y z)
     (tak (1- y) z x)
     (tak (1- z) x y))))
(tak 18 12 6)

E-mail: kondo@nak.math.keio.ac.jp