Hi,
I'm new to using object databases. Currently I'm experience the following error:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at com.objectdb.o.EBW.<init>(EBW.java:31) at com.objectdb.spi.OWriter.<init>(OWriter.java:26) at com.objectdb.o.TYW.<init>(TYW.java:97) at com.objectdb.o.ENH.c(ENH.java:197) at com.objectdb.o.ENT.T(ENT.java:821) at com.objectdb.o.LDR.y(LDR.java:484) at com.objectdb.o.LDR.x(LDR.java:448) at com.objectdb.o.LDR.s(LDR.java:161) at com.objectdb.o.OBC.aM(OBC.java:1068) at com.objectdb.o.OBC.aK(OBC.java:968) at com.objectdb.o.OBC.UG(OBC.java:809) at com.objectdb.o.QRR.h(QRR.java:273) at com.objectdb.o.QRR.b(QRR.java:175) at com.objectdb.jpa.JpaQuery.getResultList(JpaQuery.java:686) at newstockscreener.DBDataRetriever.getDailyEntriesForSymbol(DBDataRetriever.java:53) at newstockscreener.StockIterator.iterate(StockIterator.java:35) at newstockscreener.Runner.main(Runner.java:23)
I think you've mentioned that stack traces arent as helpful. The following method is where I suspect the leak is:
public List<DailyEntry> getDailyEntriesForSymbol(final StockProfile symbol) { EntityManager em = GO.emf.createEntityManager(); TypedQuery<DailyEntry> q = em.createQuery("SELECT d FROM DailyEntry d " + "where d.symbol = :symbol", DailyEntry.class); q.setParameter("symbol", symbol); List<DailyEntry> results = q.getResultList(); em.close(); return results; }
The method above is called from:
for (final StockProfile symbol : symbols) { final List<DailyEntry> dailyEntries = GO.dataRetriever.getDailyEntriesForSymbol(symbol); }
There are about 18 million DailyEntry records in the database that is sifted through to get the DailyEntries for each symbol.
I am also using VirtualVM where I notice the used heap space continue to grow till the crash. A heap dump shows:
com.objectdb.o.RFV 33.016272394439966 642982 (33%) 18003496 (13%) byte[] 18.0291352369998 351112 (18%) 83005789 (59.8%) com.objectdb.o.SLV 16.62546791478174 323776 (16.6%) 7770624 (5.6%) com.objectdb.o.RSV 16.39265303188239 319242 (16.4%) 10215744 (7.4%) java.lang.Object 6.079066686521487 118388 (6.1%) 1894208 (1.4%)
as the top instances.
I am using objectdb-2.3.7.
I would appreciate any help and guidance you can provide to determine the cause behind this.
Thank you in advance.