顔認証や人物検知を動画(カメラ映像)で処理するプログラムを考えています。
その際、OpenCVを用いて作ってみようかなと考えているのですが、画像処理に
Javaというとどうしても遅いという意見を聞きます。
以前はそうだなと思っていたのですが、現在でもJavaはこういった
動画のリアルタイム解析などには向かないのでしょうか?それともC++などと
比べると遅いという意味合いなのでしょうか?
作り比べてみるのが一番かもしれませんが、皆様の所感というか
経験則などありましたら参考にさせて頂けると嬉しいです。
世情の流れで、業務アプリはwebを使ったjava で作る事が多いのです。
java は早くなったというのですが…
どうしても速度が欲しい部分のCGIをCで組み直してみると、体感的には数秒かかっていた処理が瞬間的に終わるようになります。
ああ、やっぱりな。と思う事しきりですね。
世情の流れで、業務アプリはwebを使ったjava で作る事が多いのです。
java は早くなったというのですが…
どうしても速度が欲しい部分のCGIをCで組み直してみると、体感的には数秒かかっていた処理が瞬間的に終わるようになります。
ああ、やっぱりな。と思う事しきりですね。
JavaはVMの立ち上がりやJITが適用されるまでの時間があるのでCGIっていうのは比較には一番不利な条件じゃないでしょうか。同様に、頻繁に起動しないとならない処理には向かないと言えると思います。
補足というか突っ込みコメントありがとうございました。ざっくりになってしまいますが、CGIはバックで立ち上がって準備ができているのに対し、Javaの方は、イベントが起きてからVMが立ち上がるので条件が違うと言った意味合いでしょうか?確かに…。ありがとうございます。
Javaがリアルタイム処理に向かないもう一つの理由として、単純なパフォーマンス以上にフルGCの存在があります。
単純なパフォーマンスはハードウェアの進化に比例して改善するので、C++などで書いたネイティブコードより遅かったとしてもいずれ問題ではなくなります。
しかしフルGCは、ハードウェアが進化してもあまり改善しません。
CPUも速くなりますがメモリ搭載量も増えていくので、メモリ搭載量に比例するフルGC時間は短くならない、と。
リアルタイムなんだけどときどきプチフリーズするかもしれない、というのを許せるかどうかという問題になってきます。
メモリが増えた分だけフルGCの時間もかかるということですね?
フルGCが起きる可能性も踏まえて、どちらがよいか…でしょうか。
CやC++はメモリ管理が難しいというお話をよく聞くので避けてしまっていた面がありますが、Javaでもこうした面があるのですね・・・。
匿名回答5号さんの回答は自分の理解力が足らず、何の1.4なのか理解できずすみません。
ほかの方々もコメントありがとうございました。
連休もありますし、まずは自分で動くものをJavaで作ってみて速さ遅さを実感してみます。
JavaはVMの立ち上がりやJITが適用されるまでの時間があるのでCGIっていうのは比較には一番不利な条件じゃないでしょうか。同様に、頻繁に起動しないとならない処理には向かないと言えると思います。
2015/04/24 21:01:04補足というか突っ込みコメントありがとうございました。ざっくりになってしまいますが、CGIはバックで立ち上がって準備ができているのに対し、Javaの方は、イベントが起きてからVMが立ち上がるので条件が違うと言った意味合いでしょうか?確かに…。ありがとうございます。
2015/05/01 11:31:00