小例:String常量池の位置をどう説明しますか?
以前「Javaスタックとスタックについての考え」というスレッドを立てたことがありますが、具体的な内容はhttp://zangxt.iteye.com/blog/440330を参照してください.
ここでは単純な例を挙げるだけで、文字列定数メモリの位置を説明します.
余談はさておき、直接コードします.
実行してみたらどうなりますか?
true Exception in thread「main」java.lang.OutOfMemoryError:PermGen space at java.lang.String.intern(Native Method) at Test.main(Test.java:16)Java Result:1
異常情報はPermGenがいっぱいだと教えてくれます.えっと、文字列の定数がどこにあるか分かります.PermGenはjvm仕様の中でいわゆる方法エリアです.
ここは怠けています.大きな数を指定しただけで、PermGenを溢れさせます.でも、時間は長いかもしれません.まめな人はやはり自分でjava運行のメモリを指定したほうがいいです.少し小さくして確認できます.
ここでは単純な例を挙げるだけで、文字列定数メモリの位置を説明します.
余談はさておき、直接コードします.
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
String str = "abc";
char[] array = {'a', 'b', 'c'};
String str2 = new String(array);
// intern() str2
str2 = str2.intern();
// intern
System.out.println(str == str2);
// , intern
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 10000000; i++) {
String temp = String.valueOf(i).intern();
list.add(temp);
}
}
}
実行してみたらどうなりますか?
true Exception in thread「main」java.lang.OutOfMemoryError:PermGen space at java.lang.String.intern(Native Method) at Test.main(Test.java:16)Java Result:1
異常情報はPermGenがいっぱいだと教えてくれます.えっと、文字列の定数がどこにあるか分かります.PermGenはjvm仕様の中でいわゆる方法エリアです.
ここは怠けています.大きな数を指定しただけで、PermGenを溢れさせます.でも、時間は長いかもしれません.まめな人はやはり自分でjava運行のメモリを指定したほうがいいです.少し小さくして確認できます.