Dave Korn wrote: > Andrew Haley wrote: >> Dave Korn wrote: >> >>> 1) Would this be a reasonable approach, specifically i) in adding a >>> configure >>> option to cause sublibraries to be built, and ii) in using gmake's $(filter) >>> construct to crudely subdivide the libraries like this? >> At program startup the first library would be loaded, it would load >> the next, and so on. There are a few parts of libgcj that are truly >> independent, but I suspect that you'd always load almost all of it. >> So, you'd have longer startup time for loading all those files. > > Compared to a single DLL that is unusably malformed because it exceeds > system limits, that's still an improvement :) > >> With regard to GNU libc platforms: >> >> You'd no longer be able to make so much use of fast calls between >> functions in the same library; you'd have to go via the PLT. >> >> Also, dl_iterate_phdr() is used a great deal (for finding exception >> regions, garbage collection, etc.) and it linearly scans the libraries >> that are loaded. So, the more libraries you have loaded, the slower >> it goes. >> >> Now, I don't know how much of these characteristics are shared by >> Windows, but I imagine some of them are. > > Yes, the inter-library calls would have to be dllimports and go through > stubs (one extra indirect branch). I don't know how dl_iterate_phdr works on > win32 but I imagine that it's also linear in the number of libs. > >> So, I suspect your best bet would be to split libgcj into core and >> non-core libraries and not slice much more thinly than that. I can >> advise you what is core and what isn't. > > Please do, I'll happily try that approach since it might significantly > simplify my inter-dependences problems.
Here's a starter list of non-core packages: gnu/CORBA gnu/classpath/management gnu/java/awt/dnd/peer/gtk gnu/java/awt/dnd/peer/gtk gnu/java/awt/peer/gtk gnu/java/awt/peer/qt gnu/java/awt/peer/x gnu/java/beans gnu/java/lang/managementheaders gnu/java/math gnu/java/util/prefs/gconf gnu/java/util/prefs/gconf gnu/javax/management gnu/javax/rmi gnu/javax/sound/midi gnu/javax/sound/sampled/gstreamer) ignore gnu/xml/aelfred2 gnu/xml/dom gnu/xml/libxmlj gnu/xml/pipeline gnu/xml/stream gnu/xml/transform gnu/xml/util gnu/xml/validation gnu/xml/xpath java/lang/management javax/imageio javax/rmi javax/xml org/omg/CORBA org/omg/CORBA_2_3 org/omg/CosNaming org/omg/Dynamic org/omg/DynamicAny org/omg/IOP org/omg/Messaging org/omg/PortableInterceptor org/omg/PortableServer org/omg/SendingContext org/omg/stub org/relaxng org/w3c org/xml Andrew.