Home › Category Archives › 開発

PerlとJavaの恐るべき速度差

いやこんな時間に何やってんだよと思われるかもしれませんが、居ても立ってもいられなかったので。

先ほど、うふふさんに尋ねられていた「4,632,097までの素数の個数」について、指定した数までの素数の個数を求めるスクリプトを作っていたんですよ。
最初はPerlで作っていたんですよ。Perlのバッチは手軽に作れて手軽に実行できるから、割と重宝しています。
ロジックとしては単純で、指定された数までループを繰り返して、それまでに出現した素数で割り切れるかどうかを確認する、というものです。
これは後になればなるほど飛躍的に計算量が上昇するのですが、計算のステップを2ずつにしたり、割り切れるか判定する素数を対象の数の半分(本当は平方根が良かったんですが、Perlでの平方根の求め方が分からなかったので)までにするなど、ループ回数を少なくする工夫をしました。
しかし、これだけやったにも関わらず、Perlでは30分以上かけても計算を完了することが出来ませんでした。
そこで、以前検証してPerlよりもメモリを使用する代わりに計算速度の速いということが分かっているJavaで組みなおしてみました。JavaではMathクラスを使うことで平方根が簡単に求められるので、そこの改善も込めました。
すると、Perlで30分かけて終わらなかった計算が、ほんの数秒で完了してしまいました。
以前PerlとJavaで速度検証をしたときにも思ったことですが、Javaの計算速度は半端ないです。
Cの方がさらに早い計算速度になるとは思われますが、Javaほど手軽にバッチを作れないので、手間と計算速度の釣り合いが取れているのはJavaだということが出来ます。
速度を改善したいというなら、Javaに手を出すのも手段の一つのようです。

あまりにも劇的に違いが出たため、興奮してつい日記に記してしまいました。
ちなみに、「4,632,097までの素数の個数」は324,538個でした。

+追記+
デスクトップでPerlのロジックをJavaと同様の改善を施して速度比較を行ったところ、Perlでは40秒、Javaでは535ミリ秒の実行時間がかかりました。差が出過ぎだろ常考。
あとオラクルJDKのダウンロードにアカウント登録が必要とか改悪勧めるのマジでやめてほしい。そこまでして自社製品を売りたいかと軽くなく引く。

久々の格ゲー動画


そういえば、一時期はニコエンコが起動しなくなって焦ったんですよね。
ニコエンコってのは俺が使ってる動画エンコードソフトで、デスクトップキャプチャーで録画した馬鹿でかい容量の動画を、それなりのサイズに圧縮してくれるものです。
結局原因は、テスト環境構築のために導入したPHP5.3.8でした。PHP5.2にしたら動くようになったので、今はそれで妥協してます。
まあ、俺はバリッバリのPerl派なので、PHPでアプリ開発ってのは、自主開発に限ってはする気ないんですが。
ローカルアプリは、今はJavaのみで開発してますが、そのうちC#でも開発したいと考えてます。Windowsアプリとしてもいいし、DirectX使えるからゲーム制作にも使えるし。
Javaも別に悪くはないんですが、いかんせんVM上で動くという性質上、メモリを食いまくって重いんですよね。そうならないようにする工夫が、Java開発者のミッションなわけですが。

動画の紹介なのか、開発の話なのか。

仕事が取れるまでの仕事

今気象予報士資格を取ろうとしてるのって、母者の会社の手伝い絡みなんですが、在宅の仕事が取れるまでは本格的に母者の会社の手伝いをしようかと考えています。
一応外注扱いなので、俺の収入にはなります。雀の涙程度ですが。
それに当たって、今ASP.NETを勉強中です。ASPっていうかほとんどC#ですが。
C#は何となくJavaに似ているところがあるのですが、ASPはJSPに似ており、ASP.NET+C#はJava Servletの開発に近いものがあります。
これなら理解も早く済みそうです。C#はそのままDirectXを使ったゲームプログラミングに応用できるので、今後の足しにもなると思います。
C#を習熟したら、一個軽いゲームでも作りましょうかね。ここで無料DLできるような奴。

サーバーはLinuxを使っている身としては、ASPってどれくらいの需要があるの?って感じがします。
LinuxでASPを動かすのは色々面倒なので、普通はPHPとかPerl、Javaなんかで組むと思います。
そして世の中で稼働しているサーバーの大半は確かUnix系なので(LinuxはUnix系OSです)、ASPで作るページってのはほとんどないんじゃないでしょうか。
実際のところ、俺はASPで作られたページをMicroSoftのホーム以外で見たことがありません。
C#はクライアントソフトに応用できますが、ASPは完全にWEB限定です。多分、母者の会社の手伝いをする以外では、使い道はないでしょう。
まあ、JSPの延長のつもりでやっていきましょう。

しかし、気象予報士資格試験の勉強もやりーの、それが終わったら今度は応用情報処理試験の勉強する予定ーの。最近勉強ばっかりだな。
名目上フリープログラマーですが、今のところ仕事がないので、そんな時期なのかもしれません。