Probably triggered the removal of the boolean a shift in allocation
size for the LDM. For others the size reduction can be different.
I still think it is worth the effort, but ymmv.
Here are the two tests I performed including profiling information
(thanks to YourKit):
public class MemTest extends TestCase
{
Object[] foo = new Object[1000000];
public static class Object0 {
}
public static class Object1 extends Object0 {
boolean bool1;
}
public static class Object2 extends Object1 {
boolean bool2;
}
public static class Object3 extends Object2 {
boolean bool3;
}
public static class Object4 extends Object3 {
boolean bool4;
}
public static class Object5 extends Object4 {
boolean bool5;
}
public static class Object6 extends Object5 {
boolean bool6;
}
public static class Object7 extends Object6 {
boolean bool7;
}
public static class Object8 extends Object7 {
boolean bool8;
}
public static class Object9 extends Object8 {
boolean bool9;
}
public static class Object10 extends Object9 {
boolean bool10;
}
public static class Object11 extends Object10 {
boolean bool11;
}
public static class Object12 extends Object11 {
boolean bool12;
}
public static class Object13 extends Object12 {
boolean bool13;
}
public static class Object14 extends Object13 {
boolean bool14;
}
public static class Object15 extends Object14 {
boolean bool15;
}
public static class Object16 extends Object15 {
boolean bool16;
}
public static class Object17 extends Object16 {
boolean bool17;
}
public static class Object18 extends Object17 {
boolean bool18;
}
public void testMem() {
foo[0] = new Object0();
foo[1] = new Object1();
foo[2] = new Object2();
foo[3] = new Object3();
foo[4] = new Object4();
foo[5] = new Object5();
foo[6] = new Object6();
foo[7] = new Object7();
foo[8] = new Object8();
foo[9] = new Object9();
foo[10] = new Object10();
foo[11] = new Object11();
foo[12] = new Object12();
foo[13] = new Object13();
foo[14] = new Object14();
foo[15] = new Object15();
foo[16] = new Object16();
foo[17] = new Object17();
foo[18] = new Object18();
System.out.println("Foo");
}
}
The memory dump is attached to this message.
[17] nl.topicus.iridium.models.MemTest$Object17 80
[18] nl.topicus.iridium.models.MemTest$Object18 80
[15] nl.topicus.iridium.models.MemTest$Object15 72
[16] nl.topicus.iridium.models.MemTest$Object16 72
[13] nl.topicus.iridium.models.MemTest$Object13 64
[14] nl.topicus.iridium.models.MemTest$Object14 64
[11] nl.topicus.iridium.models.MemTest$Object11 56
[12] nl.topicus.iridium.models.MemTest$Object12 56
[9] nl.topicus.iridium.models.MemTest$Object9 48
[10] nl.topicus.iridium.models.MemTest$Object10 48
[7] nl.topicus.iridium.models.MemTest$Object7 40
[8] nl.topicus.iridium.models.MemTest$Object8 40
[5] nl.topicus.iridium.models.MemTest$Object5 32
[6] nl.topicus.iridium.models.MemTest$Object6 32
[3] nl.topicus.iridium.models.MemTest$Object3 24
[4] nl.topicus.iridium.models.MemTest$Object4 24
[1] nl.topicus.iridium.models.MemTest$Object1 16
[2] nl.topicus.iridium.models.MemTest$Object2 16
[0] nl.topicus.iridium.models.MemTest$Object0 8
An other test:
public class MemTest extends TestCase
{
Object[] foo = new Object[1000000];
public static class Object0 {
}
public static class Object1 extends Object0 {
boolean bool1;
}
public static class Object2 {
boolean bool1;
boolean bool2;
}
public static class Object3 {
boolean bool1;
boolean bool2;
boolean bool3;
}
public static class Object4 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
}
public static class Object5 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
}
public static class Object6 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
}
public static class Object7 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
}
public static class Object8 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
}
public static class Object9 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
boolean bool9;
}
public static class Object10 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
boolean bool9;
boolean bool10;
}
public static class Object11 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
boolean bool9;
boolean bool10;
boolean bool11;
}
public static class Object12 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
boolean bool9;
boolean bool10;
boolean bool11;
boolean bool12;
}
public static class Object13 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
boolean bool9;
boolean bool10;
boolean bool11;
boolean bool12;
boolean bool13;
}
public static class Object14 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
boolean bool9;
boolean bool10;
boolean bool11;
boolean bool12;
boolean bool13;
boolean bool14;
}
public static class Object15 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
boolean bool9;
boolean bool10;
boolean bool11;
boolean bool12;
boolean bool13;
boolean bool14;
boolean bool15;
}
public static class Object16 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
boolean bool9;
boolean bool10;
boolean bool11;
boolean bool12;
boolean bool13;
boolean bool14;
boolean bool15;
boolean bool16;
}
public static class Object17 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
boolean bool9;
boolean bool10;
boolean bool11;
boolean bool12;
boolean bool13;
boolean bool14;
boolean bool15;
boolean bool16;
boolean bool17;
}
public static class Object18 {
boolean bool1;
boolean bool2;
boolean bool3;
boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
boolean bool8;
boolean bool9;
boolean bool10;
boolean bool11;
boolean bool12;
boolean bool13;
boolean bool14;
boolean bool15;
boolean bool16;
boolean bool17;
boolean bool18;
}
public void testMem() {
foo[0] = new Object0();
foo[1] = new Object1();
foo[2] = new Object2();
foo[3] = new Object3();
foo[4] = new Object4();
foo[5] = new Object5();
foo[6] = new Object6();
foo[7] = new Object7();
foo[8] = new Object8();
foo[9] = new Object9();
foo[10] = new Object10();
foo[11] = new Object11();
foo[12] = new Object12();
foo[13] = new Object13();
foo[14] = new Object14();
foo[15] = new Object15();
foo[16] = new Object16();
foo[17] = new Object17();
foo[18] = new Object18();
System.out.println("Foo");
}
}
Produces:
[17] nl.topicus.iridium.models.MemTest$Object17 32
[18] nl.topicus.iridium.models.MemTest$Object18 32
[9] nl.topicus.iridium.models.MemTest$Object9 24
[10] nl.topicus.iridium.models.MemTest$Object10 24
[11] nl.topicus.iridium.models.MemTest$Object11 24
[12] nl.topicus.iridium.models.MemTest$Object12 24
[13] nl.topicus.iridium.models.MemTest$Object13 24
[14] nl.topicus.iridium.models.MemTest$Object14 24
[15] nl.topicus.iridium.models.MemTest$Object15 24
[16] nl.topicus.iridium.models.MemTest$Object16 24
[1] nl.topicus.iridium.models.MemTest$Object1 16
[2] nl.topicus.iridium.models.MemTest$Object2 16
[3] nl.topicus.iridium.models.MemTest$Object3 16
[4] nl.topicus.iridium.models.MemTest$Object4 16
[5] nl.topicus.iridium.models.MemTest$Object5 16
[6] nl.topicus.iridium.models.MemTest$Object6 16
[7] nl.topicus.iridium.models.MemTest$Object7 16
[8] nl.topicus.iridium.models.MemTest$Object8 16
[0] nl.topicus.iridium.models.MemTest$Object0 8
Martijn
--
<a href="http://www.thebeststuffintheworld.com/vote_for/wicket">Vote</a>
for <a href="http://www.thebeststuffintheworld.com/stuff/wicket">Wicket</a>
at the <a href="http://www.thebeststuffintheworld.com/">Best Stuff in
the World!</a>