View Javadoc

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 }