TOP比較データ> 5000までの素数を表示させる

徹底比較!! PHP & Java

第2回:PHP4とJavaのパフォーマンス比較

著者:ワイズノット  土橋 芳孝   2004/11/24
前のページ  1  2  3  次のページ
5000までの素数をWebブラウザーに表示するテスト

  まずは、演算処理の実行速度を検証してみたいと思います。演算処理の実行速度を比較するプログラムとして5000までの素数をWebブラウザーに表示するプログラムを用意しました。プログラムを実行してから終了するまでの秒数を表示することで、演算処理における実行速度の比較を行います。ソースコードと検証結果は下記をご覧ください。
PHP4版  5000までの素数をWebブラウザーに表示するプログラム
<?php
// 処理開始時間を取得して表示する
list($sec1, $sec2) = explode(" ", microtime());
$start = $sec1 + $sec2;
echo 'start = '.$start.'<br>';

// 5000までの素数を算出して表示する
for($i = 2; $i <= 5000; $i++) {
$divisor = 0;
for($j = 1; $j <= $i; $j++) {
if($i % $j == 0) {
$divisor++;
}
}
if($divisor == 2) {
echo $i.'<br>';
}
}

// 処理終了時間を取得して表示する
list($sec1, $sec2) = explode(" ", microtime());
$end = $sec1 + $sec2;
echo 'end = '.$end.'<br>';

// 処理時間を算出して表示する
$elapse = $end - $start;
echo 'elapse = '.$elapse.'秒';
?>

Java(JSP)版  5000までの素数をWebブラウザーに表示するプログラム
<%@ page contentType="text/html;charset=Shift_JIS" %>
<%@ page import="java.util.*" %>


<%
long start = new Date().getTime();
%>
start = <%=start%><br>

<!-- 5000までの素数を算出して表示する -->
<%
int divisor;
for(int i = 2; i <= 5000; i++) {
divisor = 0;
for(int j = 1; j <= i; j++) {
if(i % j == 0) {
divisor++;
}
}
if(divisor == 2) {
%>
<%=i%><br>
<%
}
}

// 処理終了時間を取得して表示する
long end = new Date().getTime();
%>
end = <%=end%><br>

<!-- 処理時間を算出して表示する -->
elapse = <%=(float)(end - start) / 1000%>秒

5000までの素数をWebブラウザーに表示するプログラムの実行速度
  PHP4 Java(JSP)
1回目 14.69秒 0.46秒
2回目 14.71秒 0.46秒
3回目 14.71秒 0.45秒
4回目 14.71秒 0.45秒
5回目 14.70秒 0.46秒
平均 14.70秒 0.46秒

  結果は以上のとおりです。演算処理においてPHP4はJavaと比較して約32分の1の実行速度しかないという結果となりました。上記プログラムによって5000までの素数を算出すると12502499回の繰り返し処理を行うことになりますが、1秒あたりの繰り返し処理数に換算するとPHP4で約850510回/秒、Javaでは約27179346回/秒となります。Webアプリケーションにおける演算処理の実行速度では圧倒的にJavaが有利なようです。


5000までの素数を画面に表示するテスト

  PHPはJavaと同様、バッチ処理としても動作しますので、5000までの素数を求めるプログラムの実行速度をバッチ処理としても比較しました。ソースコードと検証結果は下記をご覧ください。

PHP4バッチ版  5000までの素数を画面に表示するプログラム
<?php
// 処理開始時間を取得して表示する
list($sec1, $sec2) = explode(" ", microtime());
$start = $sec1 + $sec2;
echo 'start = '.$start."\n";

// 5000までの素数を算出して表示する
for($i = 2; $i <= 5000; $i++) {
$divisor = 0;
for($j = 1; $j <= $i; $j++) {
if($i % $j == 0) {
$divisor++;
}
}
if($divisor == 2) {
echo $i."\n";
}
}

// 処理終了時間を取得して表示する
list($sec1, $sec2) = explode(" ", microtime());
$end = $sec1 + $sec2;
echo 'end = '.$end."\n";

// 処理時間を算出して表示する
$elapse = $end - $start;
echo 'elapse = '.$elapse.'秒';
?>

Javaバッチ版  5000までの素数を画面に表示するプログラム
import java.util.*;

public class PrimeBat {
public static void main(String[] args) {

// 処理開始時間を取得して表示する
long start = new Date().getTime();
System.out.println("start = " + start);

// 5000までの素数を算出して表示する
int divisor;
for(int i = 2; i <= 5000; i++) {
divisor = 0;
for(int j = 1; j <= i; j++) {
if(i % j == 0) {
divisor++;
}
}
if(divisor == 2) {
System.out.println(i);
}
}

// 処理終了時間を取得して表示する
long end = new Date().getTime();
System.out.println("end = " + end);

// 処理時間を算出して表示する
System.out.println
("elapse = " + (float)(end - start) / 1000 + "秒");
}
}

5000までの素数を画面に表示するプログラムの実行速度
  PHP4バッチ Javaバッチ
1回目 14.79秒 0.50秒
2回目 14.87秒 0.49秒
3回目 14.80秒 0.50秒
4回目 14.78秒 0.49秒
5回目 14.77秒 0.51秒
平均 14.80秒 0.50秒

  以上のとおり、バッチ処理でもWebアプリケーションとほぼ同様の結果となりました。PHP4の実行速度はJavaの実行速度と比較して約30分の1ということになります。1秒あたりの繰り返し処理数に換算するとPHP4で約844764回/秒、Javaでは25004998回/秒となります。

  Webアプリケーションにおいても、バッチ処理においても、PHP4の演算処理速度は、Javaの30分の1以下という結果となりました。このような結果となった原因は、やはりZendエンジンにあると筆者は考えています。JDK 1.4のJVMと比較して、PHP4のZendエンジンには、CPUリソースを有効に活用するための改良の余地が、まだまだ残されているということではないでしょうか。

前のページ  1  2  3  次のページ



著者プロフィール
株式会社ワイズノット  土橋 芳孝
以前はJavaを利用したWebアプリケーション開発とオブジェクト指向設計を得意としていたが、ワイズノットに入社以来、PHPの魅力にとりつかれる。現在はワイズノットのプロジェクトマネージャーとして、PHPをはじめとしたオープンソースの普及に力を注いでいる。


INDEX
第2回:PHP4とJavaのパフォーマンス比較
  動作環境
5000までの素数を表示させる
  データベースへの接続を繰り返す