トップページ⇒tech
80コメント18KB

JAVAのジェネリクスでデータ構造とアルゴリズム

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/05/07(月) 20:35:08
なんか気持ちいいですね。
マイライブラリを作りたくなりますね。
0002デフォルトの名無しさん2007/05/07(月) 22:00:51
ふはー
0003デフォルトの名無しさん2007/05/08(火) 01:54:08
手垢の付いたテーマだな
0004デフォルトの名無しさん2007/05/08(火) 05:14:30
Javaのジェネリクスはにせもんとか聞くが、stlとかとはなにが違うんだっけ?
0005デフォルトの名無しさん2007/05/08(火) 06:50:35
久々に速度比較してみた。まだJavaはこんなに遅いのか。。
-- C++ --
vector<int> v, v2;
for(int i = 0; i < 2000000; ++i){
 v.push_back(i);
}
for(int i = 0; i < 2000000; ++i){
 v2.push_back(v[i]);
}
-- C# -- C++より2倍くらい遅い
ArrayList v = new ArrayList(), v2 = new ArrayList();
for(int i = 0; i < 2000000; ++i){
 v.Add(i);
}
for(int i = 0; i < 2000000; ++i){
 v2.Add(v[i]);
}
-- Java -- C++より5倍くらい遅い
List<Integer> v = new ArrayList(), v2 = new ArrayList();
for(int i = 0; i < 2000000; ++i){
 v.add(i);
}
for(int i = 0; i < 2000000; ++i){
 v2.add(v.get(i));
}
0006デフォルトの名無しさん2007/05/08(火) 07:22:38

3GのCPUと1Gのメモリなら、実際何秒の差がでるよ?

2倍とか5倍とかアホくせーわ
 
0007デフォルトの名無しさん2007/05/08(火) 08:07:49
おっ、ぴたり3G/1Gだよ。1秒くらい差が出るね。というか比の問題だろ。
2倍/5倍を誤差と言えるぬるい環境でコーディングしてる奴は反応しなくていいよ。
0008デフォルトの名無しさん2007/05/08(火) 08:37:54
>>まだJavaはこんなに遅いのか。。
まだというかもうこれ以上Javaは速くならんよ

>>C++より5倍くらい遅い
そのコードでほんとに5倍も差が出るか?
0009デフォルトの名無しさん2007/05/08(火) 09:10:41
実際の現場なんて6みたいな感覚のレベルの奴であふれてるしいいんじゃねーの
0010デフォルトの名無しさん2007/05/08(火) 09:27:41
それ、最初に収まるサイズを確保してから実体のコピーをさせたらどうなの?
実用的なコードで比較するべきだと思うのだが
0011デフォルトの名無しさん2007/05/08(火) 09:45:53
C#は知らんが、そのJavaのコードはautoboxingかかってるから、
どう考えてもC++と比べたら遅そう。
0012デフォルトの名無しさん2007/05/08(火) 10:41:59
アホ臭かったりゆるいと思うようなら来なくていいじゃん。
困ってないんでしょ?
x2やx5で困ってる奴だけ来ればいいよ。
0013デフォルトの名無しさん2007/05/08(火) 11:56:56
普通だとそれってSunのHotSpotVMだと、コンパイルされないんじゃないかなと思って、
調べたけど、最近はUseOnStackReplacementって不要?

JDK6.0u1 Windows 32bit版
そのまま: 1.7秒
Listのサイズ指定: 1秒
Listサイズ指定+VMのオプション指定: 0.65秒
VMオプションは-server -XX:NewRatio=2 -XX:+DoEscapeAnalysis

どれにUseOnStackReplacementつけても、
殆ど効果が分からなかった。

まあgenericsとなんの関係もないけど。
0014132007/05/08(火) 11:57:44
書き忘れた
-XX:+UseCompilerSafepointsも一緒に指定してます。
0015デフォルトの名無しさん2007/05/08(火) 13:16:02
stlだと、サイズ指定しなくても、156msec。
まあ、こういうのが積み上がって、最終的にJavaアプリはもっさりになるんだろうね。
0016デフォルトの名無しさん2007/05/08(火) 16:51:59
仮想関数の呼び出しはC++に比べて数倍速いので問題ない。
0017デフォルトの名無しさん2007/05/08(火) 21:49:33
わずかな処理時間の短縮より生産性向上のほうが重要
■ このスレッドは過去ログ倉庫に格納されています