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>

Reply via email to