Hi,

I have been using OJB for a while quite successfully. Today I run into an outofmemory exception which I could trace to the ojb cache.

I am doing a copy from one DB to another involving 100000+ objects. Each object is stored in the cache using a key derived from its identity (int). These strings seem to gobble up the memory.

When the gc runs it does collect the SoftReference to the object, but the keys remain in the HashMap.

At least that's what I believe happens.

I've included the relevant parts from the trace below. For myself, the solution is rather simple - switch off the cache since it is not required while copying anyway.

I believe that this problem may occur in any server based system after a while - so where should be a better way to code round this. By the way - I am still using an old version (0.9.8) of OJB so please forgive me if this has already been improved upon.

Cheers,
  Stefan


TRACE 41546:
java.lang.StringBuffer.expandCapacity(StringBuffer.java:202)
java.lang.StringBuffer.append(StringBuffer.java:392)
org.apache.ojb.broker.Identity.toString(Identity.java:304) org.apache.ojb.broker.cache.ObjectCacheDefaultImpl.cache(ObjectCacheDefaultImpl.java:141) org.apache.ojb.broker.cache.ObjectCacheDefaultImpl.cache(ObjectCacheDefaultImpl.java:113) org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.storeToDb(PersistenceBrokerImpl.java:1987) org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:1905) org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:614) org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:588)


TRACE 31488:
java.lang.StringBuffer.expandCapacity(StringBuffer.java:202)
java.lang.StringBuffer.append(StringBuffer.java:392)
org.apache.ojb.broker.Identity.toString(Identity.java:304) org.apache.ojb.broker.cache.ObjectCacheDefaultImpl.lookup(ObjectCacheDefaultImpl.java:157) org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(RsIterator.java:393) org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:202) org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1243) org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1372) org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1398) org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1385)


SITES BEGIN (ordered by live bytes) Fri Oct 17 14:24:41 2003
percent live alloc'ed stack class
rank self accum bytes objs bytes objs trace name
1 14.19% 14.19% 2486576 11189 3784000 22000 41546 [C
2 14.06% 28.26% 2463776 10999 3784000 22000 31488 [C
3 2.01% 30.26% 351968 10999 352000 11000 41538 java.lang.ref.SoftReference
4 2.01% 32.27% 351968 10999 351968 10999 31503 java.lang.ref.SoftReference



--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to