effective java 提到的内存泄露?

import java.util.Random;

public class S {
	Object[] c = new Object[10];
	int length = 0;

//	public Object pop() {
//		if (length == 0)
//			return null;
//		Object r = c[--length];
//		c[length] = null;
//		return r;
//	}

	public Object pop() {
		if (length == 0)
			return null;
		return c[--length];
	}

	public int push(Object o) throws Exception{
		if (length >= 10)
			throw new Exception("Stack is full.");
		c[length++] = o;
		return length;
	}

	public static void main(String[] args) throws Exception {
		S s = new S();
		Random r = new Random();

		for (int i = 0; i < 1000000000; i++) {
			s.push(r.nextInt(1000000000)
					+ "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
			s.pop();
			if (i % 10000000 == 0) {
				System.out.println(i + "  " + (Runtime.getRuntime().freeMemory() / 0124 / 1024));
			}
		}

		System.out.println("done");
	}
}




经测试,GC运行一直正常,也没有出现out of memory。
这么多数据,如果全部载入内存,需要94G内存。

运行结果:
0  724
10000000  1257
20000000  677
30000000  766
40000000  769
50000000  514
60000000  744
70000000  699
80000000  1028
90000000  1408
100000000  534
110000000  856
120000000  1062
130000000  937
140000000  562
150000000  789
160000000  778
170000000  893
180000000  698
190000000  1699
200000000  1532
210000000  4108
220000000  948
230000000  506
240000000  1147
250000000  557
260000000  3029
270000000  757
280000000  2284
290000000  1513
300000000  796
310000000  1127
320000000  1919
330000000  3064
340000000  1476
350000000  801
360000000  1573
370000000  2960
380000000  544
390000000  1015
400000000  1138
410000000  2960
420000000  1202
430000000  1115
440000000  2878
450000000  1724
460000000  1269
470000000  961
480000000  1420
490000000  4059
500000000  3190
510000000  629
520000000  831
530000000  715
540000000  2450
550000000  1156
560000000  623
570000000  863
580000000  1281
590000000  712
600000000  785
610000000  680
620000000  783
630000000  820
640000000  757
650000000  802
660000000  1228
670000000  610
680000000  1034
690000000  832
700000000  988
710000000  1119
720000000  1280
730000000  1189
740000000  662
750000000  576
760000000  1248
770000000  1081
780000000  702
790000000  1015
800000000  1055
810000000  1447
820000000  1015
830000000  629
840000000  879
850000000  980
860000000  2208
870000000  1846
880000000  823
890000000  779
900000000  587
910000000  1795
920000000  2820
930000000  1025
940000000  1806
950000000  550
960000000  584
970000000  626
980000000  597
990000000  607
done

猜你喜欢

转载自sznmail.iteye.com/blog/1534601
今日推荐