• 締切済み

JAVAのGC時間が増加するのはページングの影響?

_ranco_の回答

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

> GC時間とページングは何か関係あるのでしょうか? GCであれ何であれ、メモリをたくさん使う処理では当然ページングも増えます。コードが良質で改良の余地ないのであれば、メモリ使用のロジックを再検討するとか、マシンのメモリをでっかくするという対策になります。 > メッセージもでていました。 何から出ているメッセージですか? スレッドと停止するのに時間がかかった、という意味が分かりません。 どんなプログラムで、どんなコードか分からないと、これ以上具体的な答えはできませんね。

rinblusky
質問者

補足

マシンのメモリを増設するのは無理です。 メモリ使用のロジックも変更できません。 メッセージはJAVAのGCログから出てるものです。 プログラムはわかりません。 ページングとGCの仕組みについてわかりやすく教えてください。 どうして、ページングが発生すると、GCの時間もかかるのでしょうか? JAVAのヒープサイズを大きくすると、何か変わりますか? ふと、思ったのですが、ページングを発生させないのも方法ですよね?

関連するQ&A

  • java 選択肢に制限時間を設ける

    こんにちは. 現在javaでプログラムを組んでいるのですが,その中で選択肢を表示させる部分があります. この選択肢の選択に制限時間を設けたいのですが,うまくいきません. このプログラムの実現のためにどんな方法があるでしょうか? どなたかご教授お願いします. なお, public class time extends Thread { public void run() { for (int i = 3; i >= 0 ; i--) { try { sleep(1000); } catch (InterruptedException e) {} System.out.println(i); } } public static void main(String[] args) { time t = new time(); t.start(); try { System.out.println("スレッド t の終了を待機します。"); t.join(); // カウントダウンが終了するのを待つ System.out.println("スレッド t が終了しました。"); } catch (InterruptedException e) {} } } こちらのソースを参考にプログラムを書いてみましたがだめでした.

    • ベストアンサー
    • Java
  • javaでアプレットを使用していますが、

    javaでアプレットを使用しています。 startメソッドでkicker.start();しているのに、 stopメソッドではkicker=null;はしているものの、 kicker.stop();は推奨されていません。 これで開始されたスレッドが停止するのでしょうか?

  • 携帯のjavaでthreadを強制中断するには

    携帯のjavaでthreadを強制中断するには javaの thread には stop() で強制的に処理を止めることができると思いますが、携帯(DoCoMo)のjava では stop() が使えないのでしょうか? 携帯で思考をしている thread が一定以上時間がかかってしまったなら、諦めて中断させたいのですが。 今は、stop()が使えないので、中断フラグを使って中断させていますが、複雑な思考のなかで、いろいろな所に中断フラグを監視しなければならず、たいへん面倒です。 なにかうまい方法をご存知ならご教授ください。

    • ベストアンサー
    • Java
  • javaのループ回数に関連する実行時間について

    Windows7 メモリ2GB弱で、下記のSample61.javaのjavaファイルを400回(又は4000回)ループしまして 各ループの『obj.method(j);』を実行する所要実行時間を測定し、最大値、最小値を表示しています。 測定環境は下記の、『S_Sample61 //フォルダー構造』、『aaa.bat //バッチファイル』、 『Sample61.java //javaファイル』をご覧ください。 400回ループの場合の各ループの最大実行時間:約0.34ms 4000回ループの場合の各ループの最大実行時間:約1.6ms Q1)400回ループと4000回ループの場合に於いて、『obj.method(j);』を実行する所要実行時間 最大値の差の原因についてコメントください。 注)もしアルゴリズムに誤りがあれば、ご指摘ください。 S_Sample61 //フォルダー構造 ---class ---jar ---src aaa.bat //バッチファイル cls c:\pleiades44\java\8\bin\javac -encoding UTF-8 -cp ./jar/* -d ./class ./src/*.java rem c:\pleiades44\java\8\bin\java -verbose:gc -cp ./class;./jar/* Sample61 c:\pleiades44\java\8\bin\java -cp ./class;./jar/* Sample61 pause Sample61.java //javaファイル class Sample61{ public static void main(String args[]){ sub obj ; long start=0; int max=0; int min=99999; for(int j=0; j<400; j++){ obj = new sub(); //dataProcess_XXX obj_dataProcess=new dataProcess_XXX(); //obj_dataProcess.setPriority(Thread.MAX_PRIORITY); //効果なし //obj_dataProcess.start(); //obj.setPriority(Thread.MAX_PRIORITY); //obj.start(); start=System.nanoTime(); obj.method(j); long end=System.nanoTime(); long wk=end-start; if(wk<min) min=(int)wk; if(wk>max) max=(int)wk; // System.out.println("cycle_time="+wk); // obj = null; // System.gc(); // try{Thread.sleep(1);}catch(InterruptedException e){} } //for String str; str=String.format("min=%1$,d max=%2$,d max/min=%3$d",min,max,(int)(max/min)); System.out.println(str); // System.out.println("min="+min+" max="+max+" max/min="+(int)(max/min)); } //main } class sub{ void method(int k){ int a,b,c; a=100; b=200; for(int i=0; i<10000; i++){ c=(a+b+k)*i; } // System.out.println("ようこそ!javaの世界へ"); } } 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • java Threadのsleepを途中で止める方

    今、訓練校に通っていて課題をだされていますが、どうもうまく行きませんのでお知恵を拝借したく思います。  java Threadのsleepを使用し、クイズの回答を10秒以内で答えるというものですが、 途中で入力をすると、次の問題の回答時間が異様に早くなり1秒ではなくなってしまいます。  こういう場合、入力をすれば、runメソッドが終わるというプログラムはどうやって書けばいいのか教えて頂きたく思います。 どうぞよろしくお願いいたします。 <下記、threadの部分だけですが、パッケージを使用するという課題のため無理やり使っています。> package pa; public class CountTest extends Thread { public void start() { super.start(); } public void run() { for (int i=10; i >= 1; i--) { try{ sleep(1000); System.out.print("⇒" ); }catch(InterruptedException e){} } System.out.println(""); for (int i=1; i >= 1; i--) { / } System.out.println("Time up "); System.out.println(""); System.out.println("1-4で答えを記入してください"); }

    • ベストアンサー
    • Java
  • Javaアプレットとマルチスレッドの組み合わせ

    Javaアプレットとマルチスレッドを組み合わせてパラパラ漫画のようなものを作りたいのですがうまくいきません。 import java.awt.Graphics; import java.awt.Image; public class kadai4 extends java.applet.Applet implements Runnable{ Image logoImage[]; Thread runner; int current; int last=6; public void init(){ logoImage=new Image[last]; for(int i=0;i<last;i++){ logoImage[i] = getImage(getCodeBase(),"image/logo" + (i+1) + ".gif"); } } public void start(){ if(runner == null){ runner = new Thread(this); runner.start(); } } public void stop(){ if(runner != null){ runner.stop(); runner=null; } } public void run(){ while(true){ for(int i=0;i<last;i++){ current=i; repaint(); pause(400); } } } public void paint(Graphics g){ g.drawImage(logoImage[current],50,25,50,50,this); } void pause(int time){ try { Thread.sleep(time);} catch (InterruptedException e) {} } } これを実行すると推奨されない API を使用またはオーバーライドしています。というエラーが発生するのですがどうすれば良いでしょうか?他の方法でも構いません

    • ベストアンサー
    • Java
  • Javaのメモリ・リークについて

    Javaのメモリ・リークについて 以下のコードはスレッド内で、無限ループをしています。 コンストラクタで呼び出し、ずっとこのままにしておいてもフリーズするか否かが知りたいです。 (jconsole.jarというツールがありますが、まだ理解に至っておりません。) ご存知の方がおられましたら教えてください。 よろしくお願いいたします。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class ActioneventRoopTest extends JFrame implements Runnable, ActionListener { JButton start = new JButton(); JButton change = new JButton("切り替え"); Boolean flag = true; public static void main(String[] args) { new ActioneventRoopTest(); } public ActioneventRoopTest() { change.addActionListener(this); start.addActionListener(this); this.add(change); this.pack(); this.setVisible(true); Thread thread = new Thread(this); thread.start(); } public void actionPerformed(ActionEvent e) { if (e.getSource() == change) { if (flag) { flag = false; } else if (!flag) { flag = true; } } } public void run() { while (true) { while (flag) { System.out.println("リンゴ"); } while (!flag) { System.out.println("ミカン"); } } } }

    • ベストアンサー
    • Java
  • phpのセションのタイムアウトについて

    os:ターボ8 PHP:4.2.3 phpのセションのタイムアウトについてご教授願えないでしょうか Q1.タイムアウトの初期値は変更できますか? php.iniの session.gc_maxlifetime = 1440 を session.gc_maxlifetime = 60 にしてhttpdを再起動して試してみたのですが1分以上放置してもセッション情報は残ったままでした。 これってどうなのでしょうか? Q2.プログラム内でタイムアウトの設定を確認するシステム変数はありますか? ちゃんとタイムアウトの時間が変わっているか確認したいのですが。 Q3.タイムアウトの時間を無限大にしてタイムアウトしない設定にする方法はありますか? 以上、個別でも結構ですのでお願いします。

    • 締切済み
    • PHP
  • Javaのアプレットについて

     Javaのアプレットでゲームを作ろうとしているのですが、フリー音楽制作ソフトの「Domino」を起動したままアプレットを使うと処理速度が速くなってしまうことがわかりました。  一応自分なりに原因を考えたのですが確証がないので、原因をご存知の方がいらっしゃれば教えていただきたいです。また、そうでなくても、何か参考になることや、皆さんなりの考え、どのようなパソコン・ソフトで同じ症状が出るのか、など、些細なことでもいいので教えていただきたいです。  わからないなりに僕が考えたのは、Dominoが使っているシステム時間とアプレットのシステム時間にはつながりがあって、Domino側がそこをいじってしまうせいでアプレットがおかしくなっているのではないか、というものです。そもそもアプレットの書き方がおかしいのかもしれませんが・・・(「考えた」ってほどよく考えてない・・・)  一応確認している範囲では、「Domino」、「Music Studio Producer」、「RPGツクールXP」などのDirectX使用ソフト、「YouTube」などの動画サイト、などなどを同時に起動していると処理が速くなることを確認しています。  問題が解決できないものであったとしても、説明書に対処法を書きたいので、よろしくお願いします。  一応、適当に作った実験用のプログラムを書いておきます。 ---------------------------------------------------- import java.applet.Applet; import java.awt.*; public class Test extends Applet implements Runnable{ Thread thread; Image bufferImage; Graphics bufG; int to_x,to_y,to_x2,to_y2,count,time; long preTime, nowTime; final int fps = 60; final double frameTime = 1000 / fps; public void init(){ to_x=to_y=to_x2=to_y2=0; count=0; time=0; preTime = 0; nowTime = 0; requestFocus(); thread = new Thread(this); thread.start(); } public void run(){ while(true){ count++; if(count>=60) { count=0; time++; if(time>=60) { time=0; } } to_x = (int)(200 * Math.cos(Math.PI*(time-15)/60*2)) + 400; to_y = (int)(200 * Math.sin(Math.PI*(time-15)/60*2)) + 240; to_x2 = (int)(100 * Math.cos(Math.PI*(count-15)/60*2)) + 130; to_y2 = (int)(100 * Math.sin(Math.PI*(count-15)/60*2)) + 350; while(nowTime-preTime < frameTime){ nowTime = System.currentTimeMillis(); } preTime = nowTime; repaint(); } } public void paint(Graphics g){ bufferImage = createImage(640,480); bufG = bufferImage.getGraphics(); bufG.setColor(Color.black); bufG.fillRect(0, 0, 640, 480); bufG.setColor(Color.white); bufG.drawLine(400,240,to_x,to_y); bufG.drawLine(130,350,to_x2,to_y2); bufG.setFont(new Font("Serif",Font.BOLD + Font.ITALIC,14)); bufG.drawString("time = " + time,20,30); bufG.drawString("milli_second = " + 1000*count/60,20,60); g.drawImage(bufferImage, 0, 0, this); } public void update(Graphics g){ paint(g); } }

    • ベストアンサー
    • Java
  • 自動ログアウト

    ログインページを作っていまして、時間が経つと自動的にログアウトするようなページを考えています。 セッションのタイムアウト時間の変更はini_set関数でsession.gc_maxlifetimeの値を変更すればいいことがわかりましたが、上手く動作しません。 他に何か設定しなければいけないのでしょうか。 よろしくお願いします。 //テストのため、10秒後にタイムアウト ini_set("session.gc_maxlifetime","10");          ・          ・          ・ session_start();

    • 締切済み
    • PHP