You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2011/04/20 00:26:46 UTC
svn commit: r1095229 - in /poi/trunk/src:
documentation/content/xdocs/status.xml
java/org/apache/poi/hssf/usermodel/HSSFRow.java
Author: nick
Date: Tue Apr 19 22:26:46 2011
New Revision: 1095229
URL: http://svn.apache.org/viewvc?rev=1095229&view=rev
Log:
Following discussions on the dev list today, tweak the logic for sizing the HSSFCells array on a HSSFRow to reduce memory over allocation in many use cases (now cribbed from the size of the row, and uses the ArrayList growth metric)
Modified:
poi/trunk/src/documentation/content/xdocs/status.xml
poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java
Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1095229&r1=1095228&r2=1095229&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Tue Apr 19 22:26:46 2011
@@ -34,6 +34,7 @@
<changes>
<release version="3.8-beta3" date="2011-??-??">
+ <action dev="poi-developers" type="fix">Tweak the logic for sizing the HSSFCells array on a HSSFRow to reduce memory over allocation in many use cases</action>
<action dev="poi-developers" type="add">49765 - Support for adding a picture to a XSSFRun</action>
<action dev="poi-developers" type="fix">Rename/Move xssf.model.Table to xssf.usermodel.XSSFTable as it now has usermodel-like features</action>
<action dev="poi-developers" type="fix">51061 - Correct target URI for new XSSF Tables</action>
Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java?rev=1095229&r1=1095228&r2=1095229&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java Tue Apr 19 22:26:46 2011
@@ -41,7 +41,7 @@ public final class HSSFRow implements Ro
public final static int INITIAL_CAPACITY = 5;
private int rowNum;
- private HSSFCell[] cells=new HSSFCell[INITIAL_CAPACITY];
+ private HSSFCell[] cells;
/**
* reference to low level representation
@@ -84,6 +84,12 @@ public final class HSSFRow implements Ro
this.sheet = sheet;
row = record;
setRowNum(record.getRowNumber());
+
+ // Size the initial cell list such that a read only case won't waste
+ // lots of memory, and a create/read followed by adding new cells can
+ // add a bit without needing a resize
+ cells = new HSSFCell[record.getLastCol()+INITIAL_CAPACITY];
+
// Don't trust colIx boundaries as read by other apps
// set the RowRecord empty for the moment
record.setEmpty();
@@ -300,9 +306,10 @@ public final class HSSFRow implements Ro
// re-allocate cells array as required.
if(column>=cells.length) {
HSSFCell[] oldCells=cells;
- int newSize=oldCells.length*2;
+ // New size based on the same logic as ArrayList
+ int newSize=oldCells.length*3/2+1;
if(newSize<column+1) {
- newSize=column+1;
+ newSize=column+INITIAL_CAPACITY;
}
cells=new HSSFCell[newSize];
System.arraycopy(oldCells,0,cells,0,oldCells.length);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org