Hi Mohan, First of all I am no JAVA expert.
When you create an object be it a row, cell or sheet you need to explicitly destroy them when finished with. The system does not do this automatically. If this is not carried out it can lead to unwanted storage usage and JAVA leaks. See David Kerber's comments. Regards, Mark. ________________________________ From: Mohan Nuggehally <[email protected]> To: POI Users List <[email protected]>; MARK GOLDEN <[email protected]> Sent: Monday, 27 October 2014, 19:43 Subject: Re: out of memory and GC overhead limit error Mark, Thanks for the response. I have a loop going over rows and columns where in I do "XSSFRow row = sheet.createRow(row_i)" and "XSSFCell cell = row.createCell(column_j)". I am under the impression that the "row" and "cell" objects are destroyed automatically once it comes out the scope of the loop. Am I misunderstanding something ? Do I need to explicitly destroy them ? If so how ? Regards, -Mohan On Mon, Oct 27, 2014 at 3:27 PM, MARK GOLDEN <[email protected]> wrote: > Hi Mohan, > > Are you cleaning up unwanted objects? > > The JVM will simply expand, surprising quickly, if you do not 'Destroy' > objects you no longer need. > > Regards, > Mark. > > > ________________________________ > From: Mohan Nuggehally <[email protected]> > To: [email protected] > Sent: Monday, 27 October 2014, 19:14 > Subject: out of memory and GC overhead limit error > > > I get this error when I try to create an excel sheet using xssf. All I am > doing is creating rows and columns by reading contents from a file. Of > course when I change the max heap size from 1GB to 6GB it works. I wonder > if 1GB is really too small or is the code bad and therefore requires a huge > heap. Any experiences ? Here is the error stack. > ------------- > Exception in thread "main" java.lang.OutOfMemoryError: Java heap space > at > > org.apache.poi.ss.util.CellReference.convertNumToColString(CellReference.java:433) > at > > org.apache.poi.ss.util.CellReference.appendCellReference(CellReference.java:492) > at > org.apache.poi.ss.util.CellReference.formatAsString(CellReference.java:455) > at org.apache.poi.xssf.usermodel.XSSFCell.setCellNum(XSSFCell.java:710) > at org.apache.poi.xssf.usermodel.XSSFRow.createCell(XSSFRow.java:175) > at org.apache.poi.xssf.usermodel.XSSFRow.createCell(XSSFRow.java:147) > at org.apache.poi.xssf.usermodel.XSSFRow.createCell(XSSFRow.java:39) > at > GraphWriteFull_to_Excel.create_sheet(GraphWriteFull_to_Excel.java:150) > at GraphWriteFull_to_Excel.main(GraphWriteFull_to_Excel.java:79) > ---------------- > The error stack is different as below when I set the max heap size to 4GB > -------------- > Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit > exceeded > at java.util.Arrays.copyOfRange(Arrays.java:2694) > at java.lang.String.<init>(String.java:203) > at java.lang.String.copyValueOf(String.java:2908) > at java.io.StreamTokenizer.nextToken(StreamTokenizer.java:702) > at > GraphWriteFull_to_Excel.create_sheet(GraphWriteFull_to_Excel.java:151) > at GraphWriteFull_to_Excel.main(GraphWriteFull_to_Excel.java:79) > --------------- > I appreciate any feedback. > > Regards, > -Mohan > > -- > Mohan Nuggehally > Senior Developer, Es-ice > Office: Direct dial: 1-631-760-3244 > Internal extension: 25172 > New York > -- Mohan Nuggehally Senior Developer, Es-ice Office: Direct dial: 1-631-760-3244 Internal extension: 25172 New York
