corda/sgx-jvm/avian/test/GC.java
Andras Slemmer 9bb3d6b972 Add 'sgx-jvm/avian/' from commit '09e4fe60d01f4f4bfb6b2976973bb4913ef61edc'
git-subtree-dir: sgx-jvm/avian
git-subtree-mainline: f978eab8d1
git-subtree-split: 09e4fe60d0
2017-03-13 12:18:24 +00:00

204 lines
3.5 KiB
Java

public class GC {
private static final Integer cache[] = new Integer[100];
private static final Integer MAX_INT_OBJ = new Integer(Integer.MAX_VALUE);
private static Integer valueOf(int i) {
try {
return cache[i];
} catch (ArrayIndexOutOfBoundsException e) {
return (i == Integer.MAX_VALUE) ? MAX_INT_OBJ : new Integer(i);
}
}
private static void small() {
for (int i = 0; i < 1024; ++i) {
byte[] a = new byte[4 * 1024];
}
}
private static void medium() {
for (int i = 0; i < 8; ++i) {
Object[] array = new Object[32];
for (int j = 0; j < 32; ++j) {
array[j] = new byte[32 * 1024];
}
}
}
private static void large() {
for (int i = 0; i < 8; ++i) {
byte[] a = new byte[16 * 1024 * 1024];
}
for (int i = 0; i < 8; ++i) {
byte[] a = new byte[16 * 1024 * 1024];
for (int j = 0; j < 32; ++j) {
byte[] b = new byte[32 * 1024];
}
}
}
private static void stackMap1(boolean predicate) {
if (predicate) {
Object a = null;
}
System.gc();
}
private static void stackMap2(boolean predicate) {
if (predicate) {
int a = 42;
} else {
Object a = null;
}
System.gc();
}
private static void stackMap3(boolean predicate) {
if (predicate) {
Object a = null;
} else {
int a = 42;
}
System.gc();
}
private static void stackMap4(boolean predicate) {
int i = 2;
if (predicate) {
Object a = null;
} else {
Object a = null;
}
do {
System.gc();
int a = 42;
-- i;
} while (i >= 0);
}
private static void noop() { }
private static void stackMap5(boolean predicate) {
if (predicate) {
noop();
}
if (predicate) {
noop();
} else {
Object a = null;
}
System.gc();
}
private static void stackMap6(boolean predicate) {
if (predicate) {
int a = 42;
} else {
Object a = null;
}
if (predicate) {
noop();
} else {
Object a = null;
}
noop();
System.gc();
}
private static void stackMap7(boolean predicate) {
try {
if (predicate) {
Object a = null;
} else {
Object a = null;
}
try {
int a = 42;
throw new DummyException();
} finally {
System.gc();
}
} catch (DummyException e) {
e.toString();
}
}
private static void stackMap8(boolean predicate) {
try {
Object x = new Object();
if (predicate) {
Object a = null;
} else {
Object a = null;
}
try {
int a = 42;
throw new DummyException();
} finally {
System.gc();
x.toString();
}
} catch (DummyException e) {
e.toString();
}
}
public static void main(String[] args) {
valueOf(1000);
Object[] array = new Object[1024 * 1024];
array[0] = new Object();
small();
array[1] = new Object();
medium();
array[2] = new Object();
large();
array[0].toString();
array[1].toString();
array[2].toString();
stackMap1(true);
stackMap1(false);
stackMap2(true);
stackMap2(false);
stackMap3(true);
stackMap3(false);
stackMap4(true);
stackMap4(false);
stackMap5(true);
stackMap5(false);
stackMap6(true);
stackMap6(false);
stackMap7(true);
stackMap7(false);
stackMap8(true);
stackMap8(false);
}
private static class DummyException extends RuntimeException { }
}