Kathey Marsden wrote:
One thing I noticed is that usingPredsPushedFromAbove is false for both the passing and failing runs. I thought it would be true for the failing case since we are using the index.

I missed printing out one instance where memoryUsageOK returned false. That is in fact the reason the hash join is skipped. I traced the problem to this code in org.apache.derby.iapi.services.cache.ClassSize which sometimes sets refSize to 4, sometimes 5 and sometimes 9. If it is 9 the test fails.


 static
   {
       try
       {
           catalog = (java.util.Hashtable)
Class.forName( "org.apache.derby.iapi.services.cache.ClassSizeCatalog").newInstance();
       }
       catch( Exception e){};

       // Figure out whether this is a 32 or 64 bit machine.
       Runtime runtime = Runtime.getRuntime();
       long memBase = runtime.totalMemory() - runtime.freeMemory();
       Object[] junk = new Object[10000];
long memUsed = runtime.totalMemory() - runtime.freeMemory() - memBase;
       int sz = (int)((memUsed + junk.length/2)/junk.length);
       refSize = ( 4 > sz) ? 4 : sz;
       minObjectSize = 4*refSize;
   }


One thing I don't understand about this code is the line.
       int sz = (int)((memUsed + junk.length/2)/junk.length);

Why is it not just memUsed/junk.length?

Also is it likely a jvm bug that we end up with 9 or are we making wrong assumptions about what the jvm will return for totalMemory() and freeMemory()?

Thanks

Kathey



Reply via email to