これは宿題であり、嘘をつくつもりはありません。「java.lang.OutOfMemoryError:PermGenspace」エラーを生成するプログラムを作成する必要があります。
講義に参加できなかったので、昨日は何時間も研究をしましたが、これが今のところです。
最初にプログラムを作成しましたが、常に次のエラーが発生しました。
java.lang.OutOfMemoryError: GC overhead limit exceeded
さて、私はさらに調査を行い、PermGenエラーが発生しないことを理解しました。これは、オブジェクト(文字列オブジェクト)を作成したものの、それらを再度使用しなかったため、ガベージと見なされたためです。だから私は自分のコードを変更し、常にこれを手に入れました:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
だからこれは私がその時点で持っていたコードです:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> test = new ArrayList<String>();
test.add(new String(""));
for (;;) {
for (int i = 0; i<test.size(); i++){
test.add(test.get(i));
}
}
}
}
また、VM引数の下に、「-XX:PermSize = 2m」がありました(さまざまな値を試しました)。同じ文字列を何度も使用しているため、コードが間違っていると言われました。それで私はそれを変えようとしました、しかし私はまだ失敗しました。次に、このコードを見つけました:( java.lang.OutOfMemoryErrorにつながるアルゴリズム:PermGenスペースエラー)
Random rnd = new Random();
List<String> interned = new ArrayList<String>();
for (;;) {
int length = rnd.nextInt(100);
StringBuilder builder = new StringBuilder();
String chars = "abcdefghijklmnopqrstuvwxyz";
for ( int i = 0; i < length; i++ ) {
builder.append(chars.charAt(rnd.nextInt(chars.length())));
}
interned.add(builder.toString().intern());
}
それで、私が正しく理解していれば、これは私にPermGenエラーを与えるはずですか?しかし、それでもJavaヒープエラーが発生します。
また、私はこれを見つけました:http: //javaeesupportpatterns.blogspot.com/2011/10/java-7-features-permgen-removal.html 繰り返しますが、正しく理解していれば、java7を使用すると、おそらくjavaヒープスペースエラーが発生します。取得する必要がありますか?PermGenエラーを取得することはもう不可能ですか?さて、コンパイラとプロジェクトのバージョンをJava 6に変更しようとしましたが、それでもJavaヒープスペースエラーが発生しました。
講義に出席しなかったのは私のせいですが、ここで何が間違っているのか、何が欠けているのかを理解するために助けを借りることができます。