Moved the sysouts to the end.  Here are some sample runs.  The warm up effect may just be environmental.  

Five runs with no warm up:
1.    Get Provider: 137
Mount Zip: 111
Determine Packages: 77
2. Get Provider: 133
Mount Zip: 93
Determine Packages: 75
3. Get Provider: 122
Mount Zip: 174
Determine Packages: 73
4. Get Provider: 109
Mount Zip: 96
Determine Packages: 73
5.   Get Provider: 134
Mount Zip: 117
Determine Packages: 65
Five runs with warm up:
1. Get Provider: 80
Mount Zip: 109
Determine Packages: 67
2. Get Provider: 83
Mount Zip: 86
Determine Packages: 82
3. Get Provider: 82
Mount Zip: 87
Determine Packages: 79
4. Get Provider: 78
Mount Zip: 94
Determine Packages: 63
5. Get Provider: 83
Mount Zip: 86
Determine Packages: 72




On Jan 5, 2010, at 2:43 PM, Bill Burke wrote:

You should move the System.out.println("Mount Zip...") to the end as it
will screw up timings.

BTW, "warming up the JVM" has absolutely no effect on my timings.

John Bailey wrote:
The recursive mounting is really for Zip files nested within Zip files.  So in this case there is no need.  

Here is the code I have been testing:

---
public class PackageVisitorTestCase extends BaseTestCase
{
  public PackageVisitorTestCase(String s)
  {
     super(s);
  }

  public void testPackageVisitor() throws Exception
  {
     Thread.sleep(1000);
     URL url = Thread.currentThread().getContextClassLoader().getResource("jacorb.jar");
     TempFileProvider provider = null;
     Closeable handle = null;
     try {
        long start = System.currentTimeMillis();
        provider = TempFileProvider.create("test", Executors.newScheduledThreadPool(2));
        System.out.println("Get Provider: " + (System.currentTimeMillis() - start));
        VirtualFile jarFile = VFS.getChild(url);
        start = System.currentTimeMillis();
        handle = VFS.mountZip(jarFile.getPhysicalFile(), jarFile, provider);
        System.out.println("Mount Zip: " +  (System.currentTimeMillis() - start));

        VirtualFile[] roots = {jarFile};
        start = System.currentTimeMillis();
        Set<String> pkgs = PackageVisitor.determineAllPackages(roots, null, ExportAll.ALL, null, null, null);
        System.out.println("Determine Packages: " +  (System.currentTimeMillis() - start));
     }
     finally {
        VFSUtils.safeClose(handle, provider);
     }
  }

}



On Jan 5, 2010, at 2:24 PM, Bill Burke wrote:


John Bailey wrote:
I have been running the tests through JProfiler.  Not sure if I just have not optimized the profilers settings, but I am getting numbers all over the board, and some are well over double the time of a JUnit execution.  The non-profiler time to run the test seems to be <300ms.

With the profiler enable, I can see ~30% of the total time is in the VFS.mountZip call.  With >10% of the total test time taken up by the 5,085 calls to org.jboss.vfs.util.PathTokenizer.getTokens.  

The org.jboss.classloading.plugins.vfs.PackageVisitor.determineAllPackages call is taking ~35% of the total test time to run.  With ~14% of the total test time in VirutalFile.isDirectory.

Ya, JProfiler is all over the place for me too.

I did currentTimeMillis() timing  VFS init took 179/252ms if I don't do
children recursive mount.  420/456ms if I do do recursive child mount.
(Maybe children are getting initialized/cached or something with the
recursive child mount).


Maybe there is room for more caching of this isDirectory like calls.  There may be a problem with caching the info as the actual file system can change for a given VirutalFile, and the cached information is not guaranteed to remain accurate.  

Should be fine to cache for a jar?  VirtualFile could ask the FileSystem
if its cacheable or not.

Or, even better, you could have parallel non-cached getters that could
be used by sensitive logic (like a deploy/ directory scanner).  If a
non-cached getter detects a new value, it invalidates the entire cache.

i.e.


Bill

--
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com
_______________________________________________
jboss-development mailing list
jboss-development@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-development

--
 John Bailey
 JBoss by Red Hat
--





_______________________________________________
jboss-development mailing list
jboss-development@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-development

--
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com
_______________________________________________
jboss-development mailing list
jboss-development@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-development

--
  John Bailey
  JBoss by Red Hat
--