1 package net.sf.ehcache.pool.sizeof;
2
3 import static org.hamcrest.CoreMatchers.is;
4 import static org.junit.Assert.assertThat;
5
6 import net.sf.ehcache.pool.sizeof.filter.AnnotationSizeOfFilter;
7 import net.sf.ehcache.pool.sizeof.annotations.IgnoreSizeOf;
8 import net.sf.ehcache.pool.sizeof.filter.ResourceSizeOfFilter;
9
10 import org.junit.BeforeClass;
11 import org.junit.Test;
12
13 public class FilteredSizeOfTest extends AbstractSizeOfTest {
14
15 @BeforeClass
16 public static void setup() {
17 new CrossCheckingSizeOf().deepSizeOf(new Object());
18 System.out.println("Testing for a " + System.getProperty("java.version") + " JDK " +
19 ") on a " + System.getProperty("sun.arch.data.model") + "-bit VM " +
20 "(compressed-oops: " + COMPRESSED_OOPS +
21 ", Hotspot CMS: " + HOTSPOT_CMS +
22 ")");
23 }
24
25 @Test
26 public void testAnnotationFiltering() throws Exception {
27 SizeOf sizeOf = new CrossCheckingSizeOf(new AnnotationSizeOfFilter());
28 if (System.getProperty("java.version").startsWith("1.5")) {
29 if (System.getProperty("sun.arch.data.model").equals("64")) {
30 System.out.println("asserting 1.5 / 64-bit values");
31 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredClass()), is(192L));
32 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredSubclass()), is(200L));
33 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredReferrer()), is(224L));
34 } else {
35 System.out.println("asserting 1.5 / 32-bit values");
36 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredClass()), is(168L));
37 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredSubclass()), is(168L));
38 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredReferrer()), is(184L));
39 }
40 } else {
41 if (System.getProperty("sun.arch.data.model").equals("64")) {
42 if (COMPRESSED_OOPS) {
43 if (HOTSPOT_CMS) {
44 System.out.println("asserting 1.6+ / 64-bit / compressed OOPs / Hotspot CMS values");
45 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredClass()), is(168L));
46 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredSubclass()), is(176L));
47 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredReferrer()), is(200L));
48 } else {
49 System.out.println("asserting 1.6+ / 64-bit / compressed OOPs / non-Hotspot CMS values");
50 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredClass()), is(168L));
51 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredSubclass()), is(176L));
52 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredReferrer()), is(192L));
53 }
54 } else {
55 if (HOTSPOT_CMS) {
56 System.out.println("asserting 1.6+ / 64-bit / plain OOPs / Hotspot CMS values");
57 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredClass()), is(192L));
58 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredSubclass()), is(200L));
59 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredReferrer()), is(224L));
60 } else {
61 System.out.println("asserting 1.6+ / 64-bit / plain OOPs / non-Hotspot CMS values");
62 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredClass()), is(192L));
63 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredSubclass()), is(200L));
64 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredReferrer()), is(224L));
65 }
66 }
67 } else {
68 System.out.println("asserting 1.6+ / 32-bit values");
69 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredClass()), is(168L));
70 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredSubclass()), is(168L));
71 assertThat(sizeOf.deepSizeOf(new AnnotationFilteredReferrer()), is(184L));
72 }
73 }
74 }
75
76 @Test
77 public void testResourceFiltering() throws Exception {
78 SizeOf sizeOf = new CrossCheckingSizeOf(new ResourceSizeOfFilter(FilteredSizeOfTest.class.getClassLoader().getResource("sizeof.filter.fields")));
79 if (System.getProperty("java.version").startsWith("1.5")) {
80 if (System.getProperty("sun.arch.data.model").equals("64")) {
81 System.out.println("asserting 1.5 / 64-bit values");
82 assertThat(sizeOf.deepSizeOf(new ResourceFilteredClass()), is(192L));
83 assertThat(sizeOf.deepSizeOf(new ResourceFilteredSubclass()), is(200L));
84 assertThat(sizeOf.deepSizeOf(new ResourceFilteredReferrer()), is(224L));
85 } else {
86 System.out.println("asserting 1.5 / 32-bit values");
87 assertThat(sizeOf.deepSizeOf(new ResourceFilteredClass()), is(168L));
88 assertThat(sizeOf.deepSizeOf(new ResourceFilteredSubclass()), is(168L));
89 assertThat(sizeOf.deepSizeOf(new ResourceFilteredReferrer()), is(184L));
90 }
91 } else {
92 if (System.getProperty("sun.arch.data.model").equals("64")) {
93 if (COMPRESSED_OOPS) {
94 if (HOTSPOT_CMS) {
95 System.out.println("asserting 1.6+ / 64-bit / compressed OOPs / Hotspot CMS values");
96 assertThat(sizeOf.deepSizeOf(new ResourceFilteredClass()), is(168L));
97 assertThat(sizeOf.deepSizeOf(new ResourceFilteredSubclass()), is(176L));
98 assertThat(sizeOf.deepSizeOf(new ResourceFilteredReferrer()), is(200L));
99 } else {
100 System.out.println("asserting 1.6+ / 64-bit / compressed OOPs / non-Hotspot CMS values");
101 assertThat(sizeOf.deepSizeOf(new ResourceFilteredClass()), is(168L));
102 assertThat(sizeOf.deepSizeOf(new ResourceFilteredSubclass()), is(176L));
103 assertThat(sizeOf.deepSizeOf(new ResourceFilteredReferrer()), is(200L));
104 }
105 } else {
106 if (HOTSPOT_CMS) {
107 System.out.println("asserting 1.6+ / 64-bit / plain OOPs / Hotspot CMS values");
108 assertThat(sizeOf.deepSizeOf(new ResourceFilteredClass()), is(192L));
109 assertThat(sizeOf.deepSizeOf(new ResourceFilteredSubclass()), is(200L));
110 assertThat(sizeOf.deepSizeOf(new ResourceFilteredReferrer()), is(224L));
111 } else {
112 System.out.println("asserting 1.6+ / 64-bit / plain OOPs / non-Hotspot CMS values");
113 assertThat(sizeOf.deepSizeOf(new ResourceFilteredClass()), is(192L));
114 assertThat(sizeOf.deepSizeOf(new ResourceFilteredSubclass()), is(200L));
115 assertThat(sizeOf.deepSizeOf(new ResourceFilteredReferrer()), is(224L));
116 }
117 }
118 } else {
119 System.out.println("asserting 1.6+ / 32-bit values");
120 assertThat(sizeOf.deepSizeOf(new ResourceFilteredClass()), is(168L));
121 assertThat(sizeOf.deepSizeOf(new ResourceFilteredSubclass()), is(168L));
122 assertThat(sizeOf.deepSizeOf(new ResourceFilteredReferrer()), is(184L));
123 }
124 }
125 }
126
127 @SuppressWarnings("unused")
128 public static class AnnotationFilteredClass {
129 @IgnoreSizeOf
130 private final byte[] bigArray = new byte[16 * 1024];
131
132 @IgnoreSizeOf
133 private final byte[] mediumArray = new byte[1024];
134
135 private final byte[] smallArray = new byte[128];
136 }
137
138 @SuppressWarnings("unused")
139 public static class AnnotationFilteredSubclass extends AnnotationFilteredClass {
140 private final int field = 0;
141 }
142
143 @SuppressWarnings("unused")
144 public static class AnnotationFilteredReferrer {
145 private final AnnotationFilteredSubclass reference = new AnnotationFilteredSubclass();
146 }
147
148 @SuppressWarnings("unused")
149 public static class ResourceFilteredClass {
150 private final byte[] bigArray = new byte[16 * 1024];
151
152 private final byte[] mediumArray = new byte[1024];
153
154 private final byte[] smallArray = new byte[128];
155 }
156
157 @SuppressWarnings("unused")
158 public static class ResourceFilteredSubclass extends ResourceFilteredClass {
159 private final int field = 0;
160 }
161
162 @SuppressWarnings("unused")
163 public static class ResourceFilteredReferrer {
164 private final ResourceFilteredSubclass reference = new ResourceFilteredSubclass();
165 }
166 }