• 締切済み

スピードの差

次のプログラムは userData[0] → userData[1] userData[1] → userData[2] ・・・ ・・・ userData[num-2] → userData[num-1] のように、データを移動するプログラムである。 //■開始時間取得 start = System.currentTimeMillis(); //■移動 for(int i=num-2; i>=0; i--) { userData[i+1] = new UserData(userData[i].name,userData[i].dataPointer); } //■終了時間取得 end = System.currentTimeMillis(); System.out.println("時間:"+(end-start)+"ミリ秒"); numと実行時間はつぎのようになった。 (NetBeans6.0で実行) num 1回目 2回目 3回目 8196 0ms 0ms 0ms 16384 7ms 7ms 7ms 32768 9ms 9ms 8ms 65536 7ms 8ms 14ms 131072 21ms 21ms 24ms 262144 198ms 353ms 212ms 524288 90ms 92ms 91ms このときnum=524288よりnum=262144としたときの方が遅い原因と して何が考えられますか? また、num=1048576としたところ Java Result: 1 となった。実行するにはNetBeansの設定をどのように変えたらよいか?

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

この質問は(前回と同じく)、プログラムの全体構造、使用しているオブジェクト、実行環境、などに関する情報が不足しすぎています。だから、誰も答えようがない。

関連するQ&A

  • Javaについて、時間比較で処理をbreakしたいのですが、次のように

    Javaについて、時間比較で処理をbreakしたいのですが、次のように作ってみたのですが、endが解決できません。なにか手立てはないでしょうか? do {  //何か実行する。  long end = System.currentTimeMillis(); }while((end-start)<=60);

    • ベストアンサー
    • Java
  • マイクロ秒を取得するクラス

    java eclipse3.5を使って帯域測定のプログラムを作っています。 現在の時間のミリ秒を次のように取得しています。 long Ms = System.currentTimeMillis() もっと細かく測定したいので、マイクロ秒を取得しようと考えています。 どのクラスを使えばよいでしょうか? 分かる方、アドバイスお願いします。

    • ベストアンサー
    • Java
  • ループ処理について。

    下記のようなプログラムを作りました。 機能としては同じDB内にある異なるテーブルの日付を比較し、 違うものがあれば挿入するというものです。 ただしこの場合ではうまくいきません。 (1)テーブルの値を順に読み取り、 (2)にあるテーブル全ての行に対応させ、 ある行に値があれば、ループをぬけて そのsql文には空にするという形にしたいのですが、 このままですと条件文だけしかぬけていません。。。 何かよい方法があればご教授お願いいたします。 //比較するテーブル・・・(1) for($i=0;$i<$num;$i++){ $num_i=(レコードを取得する関数); //挿入するテーブル・・・(2) for($j=0;$j<$num;$j++)} $num_j=(レコードを取得する関数);    //日付が同じでなければ挿入する if($num_i["start_date"] != $num_j["start_date"] && $num_i["end_date"] != $num_j["end_date"]){ $sql[$i]="INSERT INTO date (start_date,end_date) VALUES(".$num_i["start_date"].",".$num_i["end_date"].");"; } else{ $sql[$i]=""; break; } } if($sql[$i] != ""){ print($sql[$i]); } }

    • ベストアンサー
    • PHP
  • プログラミングについての質問

    C言語において、区分求積法・台形公式・シンプソンの公式を行いたいのですがうまくいきません。 1/1+x*xを求めたいと思います。以下が途中まで作ったプログラムです。 #include <stdio.h> #define FROM 0.0 #define TO 1.0 double func(double x) { double out; out = 1.0 / ( 1.0 + x * x ); return (out); } double kubun(double start, double end, int num) { int i; double h, s; h = ( end - start ) / num; s = 0.0; for(i=0; i<num; i++) s += func( start + i * h + h / 2.0 ); return ( s * h ); } double daikei(double start,double end,int num) { int i; double h,s; h = ( end - start ) / num; s = 0.0; for(i=1; i<num-1; i++) s += func( i * h ); return ((start / 2.0 + s + end / 2.0) * h ); } double simpson(double start,double end,int num) { int i; double h,s; h = ( end - start ) / num; s = 0.0; for(i=1; i<num-1; i++) if(i%2 == 0){ s = 2 * func(i * h); }else{ s = 4 * func(i * h); } return ( (start + s + end) / 3 ); } 区分求積法はあったていると思いますが、不安なのでのせときます。 よろしくお願いします。

  • javaのエラーについて質問

    毎度、お世話になります。 下記のコードに於いて、コメント箇所でエラー(UnsupportedOperationException())が発生します。 Q1)このエラーの原因と、改良をご教授ください。 ============================= import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.IntBuffer; import java.util.Date; import java.util.Random; public class Main { public static void main(String[] args) { Random random = new Random(); random.setSeed((int) new Date().getTime()); ByteBuffer byteBuffer = ByteBuffer.allocate(10000 * 4); long start = System.currentTimeMillis(); ByteOrder order; ByteBuffer tmpBuffer; int[] ints; IntBuffer intBuffer; long end; // ビックエンディアン order = ByteOrder.BIG_ENDIAN; tmpBuffer = byteBuffer.order(order); ints = tmpBuffer.asIntBuffer().array(); //エラー発生:UnsupportedOperationException() intBuffer = IntBuffer.wrap(ints); System.out.println("ビックエンディアンで実行"); printChunk(random, ints, intBuffer); end = System.currentTimeMillis(); System.out.print("経過時間:"); System.out.println((end - start) + "msec\t"); // リトルエンディアン start = System.currentTimeMillis(); order = ByteOrder.LITTLE_ENDIAN; tmpBuffer = byteBuffer.order(order); ints = tmpBuffer.asIntBuffer().array(); //エラー発生:UnsupportedOperationException() intBuffer = IntBuffer.wrap(ints); System.out.println("リトルエンディアンで実行"); printChunk(random, ints, intBuffer); end = System.currentTimeMillis(); System.out.print("経過時間:"); System.out.println((end - start) + "msec\t"); } ========================================= 以上

    • ベストアンサー
    • Java
  • コネクションプールについて

    コネクションプール有とコネクションプール無でDB接続・切断を繰り返したときに どれくらい差があるか試してみようと思いWebアプリ上(フレームワークにStruts2を使用)で 下記コードを実行してみました。 dbcpConnectメソッド(コネクションプール有) と jdbcConnectメソッド(コネクションプール無) をそれぞれ千回づつループで回して実行してみました。 結果は 【コネクションプール有】実行にかかった時間:157384 ミリ秒 【コネクションプール無】実行にかかった時間:158760 ミリ秒 で大差はありませんでした。 コネクションプールを使用するともう少し早いと思っていたのですがそのようなことはないのでしょうか。 public String test4() { // コネクションプール有の接続 long start = System.currentTimeMillis(); for(int i=0; i< 1000; i++) { dbcpConnect(); } long stop = System.currentTimeMillis(); System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。"); // コネクションプール無の接続 start = System.currentTimeMillis(); for(int i=0; i< 1000; i++) { jdbcConnect(); } stop = System.currentTimeMillis(); System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。"); return "jstl4"; } public void dbcpConnect() { Connection con = null; try{ Context context = new InitialContext(); //DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/library"); DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/dhcpTest"); con = ds.getConnection(); Statement stmt = con.createStatement(); String sql = "SELECT * FROM test.test"; ResultSet rs = stmt.executeQuery(sql); } catch(Exception e) { System.out.println("Error"); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void jdbcConnect() { Connection con = null; try{ con = DriverManager.getConnection("jdbc:mysql://localhost", "root", "root"); Statement stmt = con.createStatement(); String sql = "SELECT * FROM test.test"; ResultSet rs = stmt.executeQuery(sql); } catch(Exception e) { System.out.println("Error"); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • javaプログラムの実行時間

    某javaベースのウェブサービスのプログラムをやってます。antでプログラムの実行を行っているので、処理時間を測定したくてSystem.currentTimeMillis()をソースコードに入れても端末には何も表示されませんでした。初心者で申し訳ないが、このようなのをどうすれぼ良いですか。

  • それぞれの暗算にかかった時間

    このプログラムは3つの数字の和を暗算させるプログラムです。 プログラムでは、10回の暗算にかかった合計時間を表示させて います。 質問としては「それぞれの回数にかかった時間をそれぞれ 表示させるにはどうすればいいのかか?」です。 #include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { int a,b,c,i,n; int num; clock_t start,end; srand(time(NULL)); printf("暗算トレーニング開始!!\n"); start=clock(); for(i=0;i<10;i++) { a=10+rand()%90; b=10+rand()%90; c=10+rand()%90; n=rand()%17; printf("%d%*s+%*s%d%*s+%*s%d:",a,n,"",n,"",b,n,"",n,"",c); do{ scanf("%d",&num); if(num==a+b+c) { break; } printf("\a違います。再入力してください。\n"); }while(1); } end=clock(); printf("%.1f秒かかりました。\n",(double)(end-start)/CLOCKS_PER_SEC); return 0; }

  • UDPで受信スループットを測定

    Javaを使って通信のプログラムを勉強しています。 UDP通信のスループットを測定するプログラムを作成しています。 送信側で5242880バイトを128回に分割して送信して、 受信側でそれらのパケットを受信する時間を計測するプログラムを 作りたいのですが、受信側でどのタイミングで受信処理を止めるのかがわかりません。 start = System.currentTimeMillis(); for(;;){   socket.receive(RecvPacket);   if(ループを抜ける条件)     break; } stop = System.currentTimeMillis(); で受信し続けて、受信するパケットがなくなったらループを抜けるというように考えました。 UDPでは送信されたパケットがすべて届くという保証はないので、 128回受信したらループを抜けるというようにできないので、困っています。 届いたパケットの数も数えて到達率も計算したいです。 受信が終わったら、ループを抜けるというようにしたいのですが、 どうすればよいでしょうか?

    • ベストアンサー
    • Java
  • 乱数について

    C の入門書を1冊読み終え、簡単なプログラムを作成しようとしているのですが、 早速分からないことが出たので教えて頂ければと思います。 --------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int num; int i = 0; while( i < 4 ){ srand(time(NULL)); num = rand()%100; printf("%d\n", num); i++; } return 0; } --------------------------------------------- 上記を実行したのですが、秒数を乱数の種としているため4回とも同じ値を取得してしまいます。 より高精度に秒数を取得することは可能でしょうか? もしくはこのようなかたちで4回ともに異なる数を得ることが出来る方法がありましたら教えて頂きたいと思います。

専門家に質問してみよう