Hi,
I am also having problems with the heap memory. A first thing to do is
to start the java virtual machine with a bigger heap size than the
default. I use -Xms256m -Xmx256m. This helps with garbage collection or
if you manage very big sized objects, but I think that your problem is
that you have a lot of alive objects in memory.
I reported yesterday a similar problem (look for subject "heap memory
not released") and people propose to me to try a couple of workarounds:
- To use multiple DataContext and dispose them when no needed.
- To throw away committed objects from the ObjectStore.
Oscar Maire-Richard
emre.yilma..r.net wrote:
>Hi,
>
>I want to transfer database records from one db to another.
>Transfer size nearly 5000 data and this each data has nearly 1000 relational
>objects.
>---->I firstly try the Paged query like :
>
>public static List getPersonels(){
>SelectQuery query = new SelectQuery(Personel.class);
>query.setPageSize(10);
>return context.performQuery(query);
>}
>this method run of the first nearly 900 count of personel class but personel
>object has 2000 rows.
>
>------>Then I try the ResultIterator like :
>
>public SelectQuery getPersonels(){
>SelectQuery query = new SelectQuery(Personel.class);
>query.setFetchingDataRows(true);
>query.setPageSize(10);
>return query;
>}
>
>used below class
>public static void transferPersonels(){
>SelectQuery oldDbItems = tr.com.htr.hgys.olddb.Personel.getPersonels();
>ResultIterator it = null;
>try {
>it = tr.com.htr.hgys.olddb.Personel.context.performIteratedQuery(oldDbItems);
>while(it.hasNextRow()) {
>Map row = it.nextDataRow();
>tr.com.htr.hgys.olddb.Personel oldDbItem = (tr.com.htr.hgys.olddb.Personel)
>tr.com.htr.hgys.olddb.Personel.context.objectFromDataRow(
>tr.com.htr.hgys.olddb.Personel.class,(DataRow)row,true);
>tr.com.htr.hgys.newdb.CopyOfPersonel newDbItem = (tr.com.htr.hgys.newdb.
>CopyOfPersonel) context.createAndRegisterNewObject("Personel");
>try{
>PersonelIdentity newIdent = PersonelIdentity.transferPersonelIdentity
>(oldDbItem);
>Card card = Card.transferPersonelCard(oldDbItem);
>tr.com.htr.hgys.olddb.Daire daire = tr.com.htr.hgys.olddb.Daire.getDaire
>(oldDbItem.getDaireId());
>String deptName = null;
>if(daire != null)
>deptName = daire.getDaireName();
>Department dept = Department.getDepartment(deptName);
>tr.com.htr.hgys.olddb.Gorev görev = tr.com.htr.hgys.olddb.Gorev.getGorev
>(oldDbItem.getGorevId());
>String jobName = null;
>if(görev != null)
>jobName = görev.getGorevName();
>Job job = Job.getJob(jobName);
>tr.com.htr.hgys.olddb.Bolum bolum = tr.com.htr.hgys.olddb.Bolum.getBolum
>(oldDbItem.getBolumId());
>String sectionName = null;
>if(bolum != null)
>sectionName = bolum.getBolumName();
>Section section = Section.getSection(sectionName);
>tr.com.htr.hgys.olddb.Unvan unvan = tr.com.htr.hgys.olddb.Unvan.getUnvan
>(oldDbItem.getUnvanId());
>String titleName = null;
>if(unvan !=null)
>titleName = unvan.getUnvanName();
>Title title = Title.getTitle(titleName);
>tr.com.htr.hgys.olddb.Groups group = tr.com.htr.hgys.olddb.Groups.getGroups
>(oldDbItem.getGroupId());
>String groupName = null;
>if(group != null)
>groupName = group.getGroupName();
>Vehicle vehicle = Vehicle.getVehicle(oldDbItem);
>newDbItem.setAccessGroupName(groupName);
>newDbItem.setAddress(oldDbItem.getAdres());
>newDbItem.setAutoCardRel(null);
>newDbItem.setCardRel(card);
>newDbItem.setClassRel(null);
>newDbItem.setDeleted(new Boolean(false));
>newDbItem.setDepartmentRel(dept);
>newDbItem.setHomePhone(oldDbItem.getTelEv());
>newDbItem.setJobRel(job);
>newDbItem.setTaxNo(oldDbItem.getVergino());
>newDbItem.setPersonelIdentityRel(newIdent);
>newDbItem.setPersonelImageRel(null);
>newDbItem.setPersonList(null);
>newDbItem.setRecordDate(oldDbItem.getDateofrec());
>newDbItem.setRecordNo(oldDbItem.getSicilno());
>newDbItem.setRoomNumber(oldDbItem.getOda());
>newDbItem.setSectionRel(section);
>newDbItem.setTitleRel(title);
>newDbItem.setUnitRel(null);
>newDbItem.setVehicleRel(vehicle);
>newDbItem.setWirelessPhone(oldDbItem.getTelCep());
>newDbItem.setWorkPhone(oldDbItem.getTelDahili());
>context.commitChanges();
>
>}catch (Exception e){
>e.printStackTrace();
>}
>java.lang.System.gc();
>}
>}
>catch(CayenneException ex) {
>ex.printStackTrace();
>}
>finally {
>try {
>it.close();
>}catch(CayenneException closeEx) {
>closeEx.printStackTrace();
>}
>}
>context.commitChanges();
>}
>
>this time I get an error of cayenne for connection timeout.
>I guess this is caused by other querys in transferPersonels() metod.
>
>How can I solve the out of memory problem..
>
>Thanks for help...
>
>
>
This archive was generated by hypermail 2.0.0 : Fri Dec 23 2005 - 05:10:25 EST