[fedora-java] [Patch] Improving gcj-dbtool performance

Andrew Haley aph at redhat.com
Fri Mar 11 10:29:12 UTC 2005


Ziga Mahkovec writes:
 > On Fri, 2005-03-11 at 10:02 +0000, Andrew Haley wrote:
 > > Ziga Mahkovec writes:
 > >  > This seemed a bit unusual and after inspecting the gcj-dbtool sources, I
 > >  > found out that in resizeMap(), a new PersistentByteMap is created for
 > >  > each jar package that is added -- amounting to almost 150 several-MB
 > >  > temporary files created.  I don't think this was intentional.
 > > 
 > > This is wrong.
 > > 
 > > Other running applications may be accessing a .db file while it is in
 > > place, and it is not safe to modify it.  The right technique is to
 > > copy the old file to a new one, add to the new one, and then rename
 > > it.  Any processes that have the old one mapped will continue to use
 > > it.
 > 
 > Ah, I hadn't thought about that.  Probably because this happens during
 > installation, where the database was just created, so I wouldn't expect
 > any consumers yet.  But I see your point; this could be a problem for
 > deferred installations of certain eclipse packages.

The gcj-dbtool isn't just used by Eclipse.  It has to be safe when
adding a jar in a live system.

 > > The problem is that the Eclipse installer is doing things in a very
 > > inefficient way.  The most efficient way is to generate a separate map
 > > for each jar file, and then merge them all at the end.  This is very
 > > fast.  It also has the advantage that the resulting file is more
 > > compact.
 > 
 > Maybe this could be further improved by creating a single separate map
 > for all new jar files (utilizing a new "--unsafe" gcj-dbtool switch
 > which triggers the behavior in the patch).  Then, only two maps would
 > have to be merged, avoiding the need to create 150 separate maps.

What's the problem with creating 150 separate maps?  I don't get it.

Andrew.




More information about the fedora-devel-java-list mailing list