我在用poi操作excel文件(8M,不到6万条数据),主要是完成从excel文件导入到sql server 2005库中,在执行到如下代码处public HSSFWorkbook getExcel(InputStream inputStream) {
HSSFWorkbook workBook = null;
if (null != inputStream)
try {
workBook = new HSSFWorkbook(inputStream);
.......出现
java.lang.OutOfMemoryError: Java heap space
错误.我设置如下也不对JAVA_OPTS="-server -Xms1024m -Xms1024m -XX:PermSize=1024m -XX:MaxNewSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true"
不知道是不是设置错了,如果你看到此贴,麻烦您给予回复,谢谢!我的环境是:myeclipse7 + tomcat6 + jdk1.6
内存4G,CPU2G
谢谢
解决方案 »
- struts2批量上传文件问题,每个目录对应一张图片,目录是数据库取的,数量不定,所以上传文件数量也不一定,怎么知道上传的文件对应哪个目录呢?
- 批量导入信息,数据库出错,问了很多人都说没遇过这样的问题,求高手帮忙解答
- jfreechart 甘特图对比问题
- 如何打印一个表格,我好急
- JFreeChart做成的图片中文字乱码,求解!
- 如何实现动态生成部分HTML
- 怎么设ftp啊
- jspSmartUpload组件对图片进行上传操作,急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
- Help!!! 关于jar
- 谁有eclipse在中文版的。请给我一个好吗?
- 网站监控问题
- spring使用application加载初始数据
如果是用eclipse启动tomcat,在preference->myeclipse->applicationserver->tomcat的jdk optionnal javaVm
下加上-Xms256m -Xmx512m如果直接通过脚本启动的tomcat,只需要在启动脚本里加上内存参数就可以了
你最好看看stacktrace,或者贴出来,
因为要判断一下是因为死循环导致的内存溢出还是内存不足导致的内存溢出。代码能给的再全一点吗?
这个问题的根源是jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现.设置的方法主要是几个.
1.可以在windows 更改系统环境变量
加上JAVA_OPTS=-Xms64m -Xmx512m
2,如果用的tomcat,在windows下,可以在
C:\tomcat5.5.9\bin\catalina.bat 中加上:
set JAVA_OPTS=-Xms64m -Xmx256m
位置在: rem Guess CATALINA_HOME if not defined 这行的下面加合适.
3.如果是linux系统
Linux 在{tomcat_home}/bin/catalina.sh的前面,加
set JAVA_OPTS='-Xms64 -Xmx512'
<div class="stacktrace" style="padding-left: 2em">
<strong>java.lang.OutOfMemoryError: Java heap space</strong>
<div>
<pre>
org.apache.poi.hssf.usermodel.HSSFRow.createCellFromRecord(HSSFRow.java:190)
org.apache.poi.hssf.usermodel.HSSFSheet.setPropertiesFromSheet(HSSFSheet.java:166)
org.apache.poi.hssf.usermodel.HSSFSheet.<init>(HSSFSheet.java:120)
org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:224)
org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:153)
tms.Utils.poiExcel.getExcel(poiExcel.java:240)
tms.mvc.actions.customer.ImportactionAction.findExcelColumnsHeader(ImportactionAction.java:362)
tms.mvc.actions.customer.ImportactionAction.uploadFileColumns(ImportactionAction.java:329)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279
)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor
.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java
:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249
)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor
.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java
:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor
.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java
:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java
:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java
:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java
:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor
.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
</pre>
</div>
</div>
</div>
错误代码:
tms.Utils.poiExcel.getExcel(poiExcel.java:240)
/**
* @param dataFilePath
* ,
* @see getExcel(String dataFilePath),dataFilePath = "C:\\excel.xls"
* @return Workbook,返回整个Workbook数据
*/
public HSSFWorkbook getExcel(String dataFilePath) {
HSSFWorkbook workBook = null;
try {
POIFSFileSystem inputStream = new POIFSFileSystem(
new FileInputStream(dataFilePath));
if (null != inputStream) {
//--
workBook = new HSSFWorkbook(inputStream);
this.setExecuteStatusInfo(true, "");
} else {
this.setExecuteStatusInfo(false, this.getErrorInfo());
}
} catch (Exception err) {
setExecuteStatusInfo(false, "数据文件为空,没有任何数据");
Logger.error(this.getClass(), err.toString());
}
return workBook;
}
这个只能从程序中操作,不会使用直接的导入/导出操作;
应该是设置服务器,但我一直没有设置对,不知道为什么...
按理说,8楼的写法应该是正确的,但我这里还是一样有错误...不知道是不是我的环境有问题:tomcat 6 + myeclipse 7 + jdk 1.6应该没问题吧...