用它的底层接口,EVentModel来操作会比较省内存,但代码写起来比较麻烦。9M左右就内存溢出的话,应该是你设置的Heap size太小了。增大Heap的大小也是必须的。
如果是xls的,用JExcel会比POI省内存。但它不支持2010。
40M不算大,不需要优化啥内存,是你处理方式有问题,这个最好的方式是切割execl成中间文件,再解析中间文件,完成后,删除中间文件。
必须得设置JVM的内存大小,否则肯定会OOM的。
加一行参数就行了:JAVA_OPTS='-Xms1024m -Xmx1024m -XX:PermSize=512M -XX:MaxNewSize=512m -XX:MaxPermSize=1024m'
另建议数据量很大的话最好用纯文本,EXCEL之类的很慢。
建议使用PageOffice,可以省好多事。
读取文件可以是用sax方式进行(excel2007,基于XSSF and SAX (Event API)事件的解析),而不一定采用dom方式读取。