1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.archive.util;
26
27 import java.lang.ref.SoftReference;
28 import java.util.LinkedList;
29 import java.util.logging.Logger;
30
31 /***
32 * Utility methods useful in testing situations.
33 *
34 * @author gojomo
35 */
36 public class TestUtils {
37 private static final Logger logger =
38 Logger.getLogger(TestUtils.class.getName());
39
40 /***
41 * Temporarily exhaust memory, forcing weak/soft references to
42 * be broken.
43 */
44 public static void forceScarceMemory() {
45
46 LinkedList<SoftReference<byte[]>> hog = new LinkedList<SoftReference<byte[]>>();
47 long blocks = Runtime.getRuntime().maxMemory() / 1000000;
48 logger.info("forcing scarce memory via "+blocks+" 1MB blocks");
49 for(long l = 0; l <= blocks; l++) {
50 try {
51 hog.add(new SoftReference<byte[]>(new byte[1000000]));
52 } catch (OutOfMemoryError e) {
53 hog = null;
54 logger.info("OOME triggered");
55 break;
56 }
57 }
58 }
59 }