32
35
long start = System.currentTimeMillis();
33
36
assertFalse("Memory prematurely GC'd", flag[0]);
34
// This check fails on IBM's J9, on which the weak ref
35
// is cleared but the object not yet GC'd
36
//assertNotNull("Memory prematurely GC'd", ref.get());
37
assertNotNull("Base memory GC'd while shared memory extant", ref.get());
38
// Avoid having IBM J9 prematurely nullify "shared"
39
43
while (ref.get() != null) {
66
70
public void testAlignment() {
71
final int SIZE = 1<<16;
68
72
Memory base = new Memory(SIZE);
69
for (int align=1;align < 8;align *= 2) {
73
for (int align=1;align < SIZE;align *= 2) {
70
74
Memory unaligned = base;
71
75
long mask = ~((long)align - 1);
72
76
if ((base.peer & mask) == base.peer)
73
77
unaligned = (Memory)base.share(1, SIZE-1);
74
78
Pointer aligned = unaligned.align(align);
75
assertEquals("Memory not aligned",
79
assertEquals("Memory not aligned (" + align + ")",
76
80
aligned.peer & mask, aligned.peer);
82
assertSame("Alignment request on aligned memory should no-op",
83
aligned, ((Memory)aligned).align(align));
87
public void testNegativeAlignment() {
89
Memory base = new Memory(SIZE);
80
92
fail("Negative alignments not allowed");
82
94
catch(IllegalArgumentException e) { }
97
public void testInvalidAlignment() {
99
Memory base = new Memory(SIZE);
100
int[] alignments = { 0, 3, 5, 9, 13 };
101
for (int i=0;i < alignments.length;i++) {
103
base.align(alignments[i]);
104
fail("Power-of-two alignments required");
106
catch(IllegalArgumentException e) { }
110
public void testAvoidGCWithExtantBuffer() throws Exception {
111
Memory m = new Memory(1024);
112
ByteBuffer b = m.getByteBuffer(0, m.getSize());
113
WeakReference ref = new WeakReference(m);
114
WeakReference bref = new WeakReference(b);
118
for (int i=0;i < 100 && ref.get() != null;i++) {
123
assertNotNull("Memory GC'd while NIO Buffer still extant", ref.get());
125
// Avoid IBM J9 optimization resulting in premature GC of buffer
131
for (int i=0;i < 100 && (bref.get() != null || ref.get() != null);i++) {
136
assertNull("Buffer not GC'd\n", bref.get());
137
assertNull("Memory not GC'd after buffer GC'd\n", ref.get());
85
140
public static void main(String[] args) {
86
141
junit.textui.TestRunner.run(MemoryTest.class);