To all,

Point # 1:

I have found that the memory footprint for a single molecule precludes using large (>>1000) collections.  I was unable to use more than a few thousand objects without some modifications to the code.

Specifically, what I did was to defer instantiation of a variety of auxiliary data structures until they are actually called for. In ChemObject for example, one can defer creation of vectors for listeners, hashtables for physicalProperties  properties, and  remarks, as well as the bool[100] flags array until first use. There are other opportunities too.

This made a significant impact in the memory footprint.

So what I am proposing is to apply this pattern for any data structure in ChemObject and its descendents that is not necessary for proper construction of the object. All others can be instantiated on first use with the overhead of  one additional method call.

old:
 public Object getProperty(Object description) {
                return properties.get(description);
        }


new:
 public Object getProperty(Object description) {
                return getProperties().get(description);
        }

protected final Hashtable getProperties(){
        if (properties==null)
                properties=new Hashtable();
        return properties;  
}


Point #2:

I have been following this project with keen interest. There are many things I like about your abstraction. I would like to contribute to the codebase. How does one go about this? ( I am new to participation in open source projects...)



Thanks,

Jeff



Jeffrey Lowrie
Research Scientist
Modeling and Informatics
Pharmacopeia Inc    
Box 5350    
Princeton, NJ 08543
Phone:  (609) 919 6140
Fax:       (732) 422 0156