• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:処理速度)

プログラムの処理速度について

このQ&Aのポイント
  • プログラムの処理速度について質問です。
  • コマンドプロンプトとJBuilderでのプログラム実行の処理速度に差異があるのはなぜでしょうか?
  • 同じマシン上でJ2SDKのバージョンも同じなのに、なぜ処理速度に差異が生じるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.4

少し調べてみました。 下記のリンクが大凡の説明になると思います。 で、問題はこの部分だと思われます。 >%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;c:\j2sdk1.4.1_03\bin この環境設定では、j2sdk1.4.1_03\bin\java.exe を参照しているつもりでも、実際は C:\Windows\system32\java.exe を呼び出してしまっているということなのだと思います。 そして C:\Windows\system32\java.exe の参照先が(デフォルトでは)C:\Program Files\java\j2re1.4.1 となっているために 1.4.1-b21VMで実行されるという結果になるのだと思います。 対処法としてレジストリの設定を変更するというやり方がありますが、レジストリをいじるのは余り気持ちの良いものではないでしょうから(笑)別の方法として、環境変数の順番を入れ替えるというのはどうでしょうか? %SystemRoot%\system32; よりも c:\j2sdk1.4.1_03\bin を前に持ってくるわけです。 これで恐らくプロンプト上でも、1.4.1_03-b2VM で実行されるようになるかと思います。 注)変更する場合には、くれぐれも自己責任の範囲でお願いします。

参考URL:
http://java.sun.com/j2se/1.4.1/ja/runtime_win32.html
tosio_s
質問者

お礼

回答ありがとうございます。 今回は、処理速度の異変のことだけでなく、対処法まで、回答いただきありがとうございました。 そして、何より、1.4.1-b21 が 1.2 よりも処理が遅いって事がわかり、重要な情報を教えていただき、自分の中では、これからの開発に役立てたいと思います。 その上、takaP-さんが、使ってない、JBuilder のことでの質問も答えていただきありがとうございました。 遅れましたが、今回、使っている JBuilder のバージョンは、JBuilder8 です。 本当に、今回は、長期に渡って、回答いただきありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • takaP-
  • ベストアンサー率79% (83/105)
回答No.3

やはり「1.4.1-b21」でしたか・笑 これ遥か昔の1.2よりも処理が遅いんですよ。バグではないかもしれないですけど、それに準ずる不良品VMですわなぁ。 >●自分は、プロンプト上とJBuilderと同じ JDK(1.4.1_03-b2)を使っていると思っていたのに、プロンプト上では、わざわざ、JBuilder 既存の JDK が使われている。 私はJBuilderは使ってませんのでなんとも答えようがないのですが、IDEってのは特定バージョンの実行環境(この場合JREのバージョン)に絞って開発されている事が往々にしてありますから、指定のバージョン以外では動かない可能性が在るわけです。 ですから、強制的にインストール時に実行環境を書きかえるといった事は有り得る話しでしょうね。 もし異なるバージョンで実行したいのならば環境変数を書き直すか、プロンプトで c:\j2sdk1.*.*\bin\java とVMを直接指定して実行するかでしょう。 特に問題がなければそのままJBuilderが設定した環境のままで使用するのが安全なのかもしれません。 それか、JBuilderを捨てるとか・w >●Javaでの開発者のみなさんは、これらの事を知っていて、処理の速い?JDK のバージョンを使っている。 それはどうか分かりません。知っているかどうかはその人次第でしょう。 で、処理の速い物を使うのかどうかですけど、これって開発の本質とは直接は関係ないような気がします。 開発者が幾ら速いVMを使って実行していたとしても、アプリケーションを使用する側が同じく速い実行環境である保証はないわけですし、その逆も然りです。 もちろん、Webアプリ等の環境構築をする場合には、各VMの実行速度の違いなどを調べて最良の選択をする必要はあるでしょうけどね。 で、開発者側がすべき事は速いVMを使って開発する事ではなくて、各VMでの検証ができる時間と環境を持つことだと思います。 ですから「1.4.1-b21 は上記のようなコード処理が遅い」という知識を得た事は重要ですが、だからといって開発者側の実行環境を直ぐに替えなければいけないということに直結する問題ではない気がしますし、IDEとの兼ね合いを考慮すると、特に問題なければいじらない方が無難ではないかと思います。

tosio_s
質問者

補足

わかりやすい、何度も丁寧な回答ありがとうございます。 何度も補足質問しまして、本筋とは離れてしまいましたが、お時間があったら、教えてください。 >「1.4.1-b21 は上記のようなコード処理が遅い」 と言う事は、今回のファイルから読み込むようなコードでは、「処理が遅い」と結果が出ましたが、他の場面では、1.4.1_03と同じ処理速度を出すと言うようなこともあるのですか? >c:\j2sdk1.*.*\bin\java は、実装した結果、実行できて、自分の思う値が取得できました。 しかし、「環境変数を書き直す」で、今の環境変数を見ると、(全て記載すると) %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;c:\j2sdk1.4.1_03\bin と、1.4.1_03 を使っている状態なのですが、やはり、JBuilder 側でうまく、JBuilder既存の(1.4.1-b21 )ものに実装されているのでしょうか? takaP-さんは、JBuilder を使われてないので、質問するのは、間違いとも思うのですが・・・。 結論は、JBuilder を落としてしまえば(バージョンの変更等も)、一番の解決策ですかね・・?(笑 JBuilder のことばかり聞いてすみません・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.2

先程、手元に在るSDKの全てのバージョンで調べてみたんですが、かなりJREのバージョン間で処理速度に違いがありました(約10倍の速度差です やはり実行しているランタイムが異なっている可能性が高いのではないでしょうかね? 試しに、java.lang.System#getProperty()で、java.versionかjava.vm.versionを調べてみてはどうでしょうか。 上のソースですと。。。 System.out.println(( g - s ) + " ms." ); //↓これを追加 System.out.println(System.getProperty("java.vm.version")); } としてみて再コンパイルし、JBuilderとプロンプトで出力文字の比較をしてみて下さい。

tosio_s
質問者

補足

回答、ありがとうございます。 結果からいくと、やはり JDK のバージョンが違ってました。(※訂正です。一番最初の質問で1.4.0と書きましたが、1.4.1_03です。) そして、状況を書きます。 コマンドプロンプトでの実行結果 900 ms 1.4.1-b21 JBuilderでの実行結果 100 ms 1.4.1_03-b2 です。 ○まず、コマンドプロンプトでの実行なのですが、 この 1.4.1-b21 は、JBuilder 既存の JDK を使って実行されています。 それは、なぜ、分かったかと言いますと、前回の補足で説明した様に、「JDK 設定」でデフォルトで設定されていたからです。 ○そして、JBuilder は、自分が思った通りで、自分自身がダウンロード、インストールした、1.4.1_03-b2 です。 そこで、今、起きている思いの違いは・・・ ●自分は、プロンプト上とJBuilderと同じ JDK(1.4.1_03-b2)を使っていると思っていたのに、プロンプト上では、わざわざ、JBuilder 既存の JDK が使われている。 ●Javaでの開発者のみなさんは、これらの事を知っていて、処理の速い?JDK のバージョンを使っている。 です。 これは、環境変数の設定辺りも関係してくるのでしょうか? それとも、JBuilder をインストールした時点で、マシン上では、JBuilder 既存の JDK を使うように書き換えられるのでしょうか・・・? いや、書き換えられると仮定すると、今回の問題が全て解決するような・・・。 またの回答よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

どちらも同じクラスファイルの実行なのですか? でしたら、ちょっと常識では考えられない結果ですね。 JITをoffにしたとしてもこれは有り得ないと思います。 hello.txtが無い状態でコマンドライン実行してるとか ってオチではないですよね(笑 出来れば、もうすこし補足願えますでしょうか。 (コンパイル辺りとか)

tosio_s
質問者

補足

早い回答ありがとうございます。 まず、最初に、指摘を貰った、「hello.txt が無い状態」なのですが、 これは、確認しました。 と言うのも、確認の確認のために、わざとhello.txt を削除して、実行を掛けてみました。 すると、 java.io.FileNotFoundException: c:\hello.txt (指定されたファイルが見つかりません。) が吐き出されます。もちろん、50回です。 そして、コンパイルなのですが、コマンドプロンプトでは、 C:\>javac SpeedTest.java C:\>java SpeedTest です。 JBuilder では、「ツール」→「JDKの設定」→「変更」で、コマンドプロンプトと 同じ環境にするために、設定しなおしました。 他は、デフォルトです。 まだ、JBuilder に慣れてないため、確認で書くのですが、コンパイルする時には、 「プロジェクト」→「再ビルド"SpeedTest"」としました。 そして、実行は、「実行」→「デフォルト実行時設定を使って"SpeedTest"を実行」 の手順です。 自分でも、「自分自身のミス!」だと思って、何度も見直してるのですが、 結果、同じ値をはじき出します・・・。 またの指摘よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 例外処理の有無ついて

    import java.io.*; class A{ public static void main(String args[]){ System.out.println("文字を入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); String stru = str.toUpperCase(); System.out.println("大文字変換すると" + stru); } } このまま実行すると例外処理をしなくてはいけません。 とエラーになり、 public static void main(String args[])throws IOException{ とすれば正常に動作するのですが、 ではどういうときに例外処理は必要になってくるのでしょうか? なにか決まりがあるのでしょうか?

    • ベストアンサー
    • Java
  • CSV読み込み 文字化け

    失礼いたします。 以前のログを見てエンコードを設定してみたのですが、出力が文字化けします。ローカルファイルを読み込んでコンソール出力しているだけなのですが・・・。 分かる方、よろしくお願いします。 -------------------ソースはここから import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; // import java.io.FileReader; FileReaderからInputStreamReaderに変更済み import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ReadCSV { public static void main(String[] args) { try { File csv = new File("C:\\AP.csv"); // BufferedReader br = new BufferedReader(new FileReader(csv)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"EUC_JP")); // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"MS932")); while (br.ready()) { String line = br.readLine(); StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + "\t"); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { キャッチ処理 }

    • ベストアンサー
    • Java
  • プログラムの組み合わせ方

    java初心者です。 2つのプログラムを組み合わせて1つのプログラムにしたいんですが、イマイチ分かりません。 このプログラムと、 import java.io.*; class Hello2 {  public static void main(String[] args) throws IOException {   System.out.println("名前を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   System.out.println(str + "さん、こんにちは!");  } } このプログラムを、 import java.io.*; class Sanbai{  public static void main(String[] args) throws IOException {   System.out.println("好きな数を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   int x;   x = Integer.parseInt(str);   System.out.println("あなたの入力した数:" + x);   System.out.println("その3倍の数:" + (x*3));  } } 組み合わせて1つのプログラムにするにはどうしたらいいですか?(>_<)

    • ベストアンサー
    • Java
  • JavaでString型をChar型に変換するプログラムが分かりません

    JavaでString型をChar型に変換するプログラムが分かりません;; どなかた助けて下さい。 下のプログラムの何がいけないんでしょうか?? いろいろ間違ってるところはあると思うんですが、教えて下さい! import java.io.*; class { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); StringBuffer moji = new StringBuffer(str1); char nyuu=moji;

  • CSVファイルを列ごとに読み込む処理について

    はじめまして。 よろしくお願いいたします。 プログラミングに興味をもち、JAVAに触れている者です。 現在eclipseでCSVファイルを列ごとに読み込んで表示する、というプログラムを作成しているのですが、コンパイルエラーを除去することができません。 エラー内容は 「処理されない例外の型 FileNotFoundException」 です。 これを見る限りでは読み込むファイルがないということらしいのですが、CSVファイルはちゃんと作成し、作成中のプログラムのファイルがあるディレクトリに置いてあります。 原因を探したいのですが、eclipseのこともjavaのこともよくわかっていないため、まるで見当がつきません。 どうかご教示をお願いいただけませんでしょうか? 以下が作成中のプログラムです。 package ioTest; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.io.FileInputStream; public class IOsample { public static void main (String[] args){ BufferedReader br = null; File csv = new File("sampleCSV.csv"); br = new BufferedReader( new InputStreamReader( new FileInputStream(csv))); while (br.ready()){ System.out.println(br.readLine()); } br.close(); } } レベルの低い質問で申し訳ありませんが、なにとぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • Ctrl+Zが入力されると終了するプログラム

    入力された文字をそのまま表示し、[Ctrl]+Zが入力されると終了するプログラムを組んでいるんですがどのように記述すればよいか困っています。アドバイスお願いします。 public static void main(String args[])throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; do{ str = br.readLine(); System.out.println(str); }while(str == null); }

    • ベストアンサー
    • Java
  • 今勉強中のjavaで。わからないことがあります。

    import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num =Integer.parseInt(str1); System.out.println("あなたは" + num +"歳です。"); } } ------------------------------- import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("あなたは" + str1 +"歳です。"); } } なぜ下では悪いのですか?なぜnum をつかないといけないかがわかりません。正確には str1とnumの違いがわからなくて困っています。何が混乱の原因ですか?

    • ベストアンサー
    • Java
  • JAVAでエラーがでる。

    JAVA初心者なのですが、下のプログラムは数値を入力して、それを表示させるという簡単なプログラムなのですが、実行すると、 String str = br.readLine(); のbr.readLine();の部分に赤い波線が出て、 「処理されない例外の型 IOException at B.main(B.java:11)」 というエラーが出てしまってこまっています。 参考書のとうりに入力しているのになぜでしょうか? タブやスペースが使えないので見にくくなってしまってすみません。 どなたかJAVAに詳しい方 教えてください。 import java.io.*; public class B { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); System.out.println(num + "が入力されまた。"); } }

    • ベストアンサー
    • Java
  • 例外処理throws

    例外処理ではthrowsかtry~catchを使いますよね。 で、ほとんどの場合はtry~catchを使うようで、ほとんどthrowsを使った例しかなく(まあ、throwsでの例外処理はプログラムが停止してしまうので推奨できないでしょうが)よくわから中区なってしまったので教えてほしいです class Input{ int set(String Toi)throws IOException{ System.out.println(Toi); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int a = Integer.parseInt(str); return a; } } のようにInputクラスを用いて外部からこれを使うために Input input = new Input(); x1 = input.set("x座標を入力"); とすると、「キャッチかスロー宣言をしろ」と怒られてしまいました。(コンパイルエラー) この場合どうすればいいでしょうか?

    • ベストアンサー
    • Java
  • 実行速度を速くする方法

    javaで整数がランダムに記述されたテキストファイルを読み込み、ソートし、テキストファイルに出力させるプログラムを考えています。 テキストファイルからの読み込みはあらかじめ配列を作っておき、scannerで読み込んでいます。 アルゴリズム(バブルソート)を変更せずに実行速度を速くするにはテキストファイルの読み込みを速くしたいのですが、どのように変更すれば良いでしょうか。 ソート数としては10万くらいを考えています。 またプログラムの記述が変なところがあれば教えていただければありがたいです。 import java.io.*; import java.util.Scanner; class test1_4{ public static void main(String args[]){ long start = System.currentTimeMillis(); try{ File filein = new File("./input.txt"); BufferedReader br = new BufferedReader(new FileReader(filein)); int x[] = new int[100000]; br = new BufferedReader(new FileReader(filein)); Scanner scan = new Scanner(new File("./input.txt")); int k=0; while(scan.hasNext()){ x[k] = scan.nextInt(); k++; } br.close(); for(int i=0; i<k; i++){ for(int j=k; j>0; j--){ int z = j-1; if(x[z] > x[j]){ int tmp = x[j]; x[j] = x[z]; x[z] = tmp; } } } try{ File fileout = new File("./output.txt"); BufferedWriter bw = new BufferedWriter(new FileWriter(fileout)); PrintWriter pw = new PrintWriter(bw); for(int i=1; i<k+1; i++){ if(x[i]>0){ pw.print(x[i]); pw.print(" "); if (i%10 == 0) { pw.print("\r\n"); } } } pw.close(); bw.close(); } catch(IOException e){ System.out.println(e); } long stop = System.currentTimeMillis(); System.out.println("実行にかかった" + (stop - start) + " ミリ秒です"); } catch(FileNotFoundException e){ System.out.println(e); } catch(IOException e){ System.out.println(e); } } }

このQ&Aのポイント
  • ZEROスーパーセキュリティVer. 23.0.24を使用しているパソコンで、ソースネクスト・アカウントを作成する方法と、同じ製品を複数登録することができるかについて教えてください。
  • ソースネクスト・アカウントについて詳しく教えていただけませんか?ZEROスーパーセキュリティを複数のパソコンにインストールするためには、ソースネクスト・アカウントが必要なのでしょうか?
  • ZEROスーパーセキュリティを8台分購入しましたが、それぞれを個別にソースネクスト・アカウントに登録する必要があるのでしょうか?ソースネクスト・アカウントの作成方法について詳しく教えてください。
回答を見る

専門家に質問してみよう