18. 配列の場合
• ヒープ上のメモリは、クラスインスタンスだけではなく、配
列を確保する場合も消費する
public class GcTest2 {
public static void main(String[] args) {
while(true) {
int[] a = new int[100];
for (int i = 0; i < a.length; i++) {
a[i] = i;
}
System.out.println("残メモリ : " +
Runtime.getRuntime().freeMemory());
}
}
}
19. メモリが回収されないプログラム
public class GcTest3 {
static ArrayList<int[]> list = new ArrayList<int[]>();
public static void main(String[] args) {
while(true) {
int[] a = new int[1000];
for (int i = 0; i < a.length; i++) {
a[i] = i;
}
list.add(a);
System.out.println("残メモリ : " +
Runtime.getRuntime().freeMemory());
}
}
}
24. ClassA.java
public class ClassA {
public static ClassA last = null;
public String name;
public ClassA(String name) {
this.name = name;
last = this;
}
@Override
public String toString() {
return "[" + name + "]";
}
}
25. ClassB.java
public class ClassB extends ClassA {
public ClassA friend;
public ClassB(String name) {
super(name);
}
public ClassB(String name, ClassA friend) {
super(name);
this.friend = friend;
}
@Override
public String toString() {
return "[" + name + ", " + friend + "]";
}
}
26. GcQuiz.java(その1)
public class GcQuiz {
public static ClassA q = new ClassA("ジマイマ");
public ClassA r = new ClassA("レベッカ");
public static void main(String[] args) {
ClassA a = new ClassA("マトン");
ClassA b = new ClassA("トム");
ClassA c = new ClassA("パペット");
ClassB[] arrayA = new ClassB[4];
b = c;
for (int i = 0; i < arrayA.length; i++) {
arrayA[i] = new ClassB("犬" + i);
}
arrayA[3].friend = arrayA[3];
arrayA[0] = arrayA[1];
c = arrayA[2];
arrayA[1] = null;
ClassA d = arrayA[0];
27. GcQuiz.java(その2 続き)
ClassB arrayB[] = new ClassB[4];
arrayB[0] = new ClassB("フロプシー", new ClassA("ネズミ
"));
arrayB[1] = new ClassB("モプシー", new ClassA("アナキン
"));
arrayB[2] = new ClassB("サテンドール", c);
arrayB[3] = new ClassB("ピーター", new ClassA("ベンジャミ
ン"));
}
}
arrayA = null;
arrayB[0].friend = null;
arrayB[1] = null;
arrayB[2] = null;
ClassB e = new ClassB("ルーシー", new ClassA("ティギー"));
e = null;
// ※ここの時点で参照されているインスタンスは何か?
87. MyStringArrayList.java
public class MyStringArrayList {
private static final int INITIAL_CAPACITY = 4;
private String[] ar;
private int sz;
public MyStringArrayList() {
}
public void add(String s) {
}
public String get(int n) {
}
public int size() {
}
}