ミスチルの大名曲の数々が配信決定!! 31日間無料!!【PR】

お世話になります。
java -verbose:ge クラス名
で実行したところ
[GC 511K->372K(960K), 0.0297021 secs]
[GC 849K->829K(1344K), 0.0320455 secs]
[Full GC 829K->829K(1344K), 0.0650338 secs]
[GC 1277K->1237K(1852K), 0.0499598 secs]
[GC 1749K->1749K(2272K), 0.0198444 secs]
[Full GC 1749K->1749K(2272K), 0.0806215 secs]
のような結果を得ましたが、
これはどのようにみればよいのかがわかりません。

見方もしくは解説があるサイトを教えていただけますか?

このQ&Aに関連する最新のQ&A

HTML5 API」に関するQ&A: HTML5でのgoogle map api v3の

A 回答 (2件)

FullGCはJavaVMが確保しているメモリ空間全てに対して


開放できるメモリがないか調査します。
一般的に処理時間が多くかかる傾向にあります。

それに対しGCは一部分(世代管理されていれば新世代だけといったもの)
に対してメモリチェックを行います。
細かいことは各種JavaVMでのGCの実装によって違うので
はっきりとはいえません。

ちなみにFullGCはSystem.gc()を使って意図的に発生させることができます。

メモリ変化がない場合は文字通りGCを行っても
メモリを開放できる部分が無かったことを表します。
既にメモリ開放された状態で意図的にSystem.gc()を使い
FullGCを発生させてもメモリ変化がないケースがあるといえます。

質問の例では、なぜそのような現象が起こるかは
別途調査が必要かもしれませんが、ただ単にJavaVMの
GCアルゴリズムが良くないのかもしれません。
    • good
    • 0
この回答へのお礼

なるほど。。。

わかりました!
ありがとうございました。

>各種JavaVMでのGCの実装によって違うので
はっきりとはいえません。

これってJavaの質問の際によくでてくるフレーズですね。
キーワードですね!

お礼日時:2003/09/22 13:55

>[GC 511K->372K(960K), 0.0297021 secs]



これを例にとると

1.GCが行われた
2.メモリ使用量511Kbytes
3.GC後メモリ使用量372Kbytes
4.javaVMが確保しているメモリ空間は960Kbytes
5.GCにかかった時間は0.0297021秒

補足
Runtimeクラスのメソッドで同様の情報が取得できます。

参考URL:http://java.sun.com/j2se/1.3/ja/docs/ja/api/java …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

あとFullGCと普通のGCの違いはどう違うのでしょうか?
[Full GC 829K->829K(1344K), 0.0650338 secs]
[GC 1277K->1237K(1852K), 0.0499598 secs]
の部分ではGC後使用メモリに変化がないのですが、
これはどういうことでしょうか?

お礼日時:2003/09/21 00:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

Q未、済、完了の英訳は?

前回類似件名で質問したのですが、
質問の仕方があまり良くなかったと思い質問し直させて頂きます。

ある項目に対して「未」、「済」、「完了」のいずれかを選択させたい帳票があるのですが、
これを英語で実現するにはどのような単語が当てはまるのでしょうか?(1,2語程度で)
「済」、「完了」については「done」が好ましいのかなと思っていますが
いかがでしょうか?

宜しくお願い致します。

Aベストアンサー

No. 2 です。

なるほど。。。
そういうことなのでしたら、“Done” と “Not Yet” が適切だと思います。

“Yet” は単独で用いられる場合、『まだ~ない』という意味に取られることはなく、接続詞の『でも』の意味で取られます。
なので、選択肢が “Done” と “Yet” であったとしても、理解してもらえない可能性が残ります。
それを排除するためには、“Not Yet” とするべきだと思います。

ご参考まで。^^

Q起動しているサービスを確認するコマンド

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

QIE11 64bitを表示するには

ネットトラブルというほどでもないですが教えて下さい。
現在IE11を使用したいます。
バージョンを見ますとbit数は何も書いてありません。という事は32bitという事で認識しています。
このファイルの保存場所はC:\Program Files\Internet Explorerになっています。
64bitも使ってみようと思い探すのですがどこにも見当たりません。

そこで調べたところデフォルトでは下記に格納されているようです
32bitは、"C:\Program Files (x86)\Internet Explorer\iexplore.exe"
64bitは、"C:\Program Files\Internet Explorer\iexplore.exe"
ということは私の場合は64bitが格納されている場所ということになりますがなぜか32bitのようです。
しかし"C:\Program Files (x86)\Internet Explorer\iexplore.exe"にはiexplore.exeの実行アイコンはありません。
又調べた結果、
インターネットオプションの詳細タブ→セキュリティ項目にある「拡張保護モードを有効にする」をONにしないとダメなようでチェックをONしました。
すると両方のパスに実行ファイルは存在するようになりました。
ただどちらもバージョンのbitの表示はありません。32bitのようです。
IE11にも32bit,64bit,がありますよね。プログラムが違うのですね。スタートメニューにも64bitの項目はありません。「新しいバージョンを自動的にインストールする」にチェックをいれていますので、その時64bitの方は削除されたのでしょうか、私のインストしているプログラムには1つしかないですが。

WINDOWS7 Pro IE11

ネットトラブルというほどでもないですが教えて下さい。
現在IE11を使用したいます。
バージョンを見ますとbit数は何も書いてありません。という事は32bitという事で認識しています。
このファイルの保存場所はC:\Program Files\Internet Explorerになっています。
64bitも使ってみようと思い探すのですがどこにも見当たりません。

そこで調べたところデフォルトでは下記に格納されているようです
32bitは、"C:\Program Files (x86)\Internet Explorer\iexplore.exe"
64bitは、"C:\Program Files\Internet Expl...続きを読む

Aベストアンサー

訂正。

誤:拡張保護モードをオフにすると、32bitモードで動作します。
誤:拡張保護モードをオンにすると、64bitモードで動作します。

正:拡張保護モードをオフにすると、64bitモードで動作します(デフォルトのモード)
正:拡張保護モードをオンにすると、32bitモードで動作します。

追記。

IE10、IE11を起動すると、実は、64bit版と32bit版の両方が同時に起動されます。

タスクマネージャーを見ると、2つが同時に起動されているのが判る筈です。


人気Q&Aランキング