java.lang.OutOfMemoryError: Java heap space

来源:互联网 发布:mac怎么输入大写字母 编辑:程序博客网 时间:2024/06/06 00:44

在做Excel数据上传时,由于解析成功后,要预览excel中所有的数据,在jsp中要显示出来,于是各种问题出来了,内存溢出是最主要的问题,还有tomcat内存溢出、数据库操作也是一个很重要的问题,当数据量超过900条时,报内存溢出(连接数据库内存溢出、tomcat内存溢出、eclipse内存溢出),不过这也很容易想到;

我做Excel导入时时,思路如下(使用poi包):

    1、先上传Excel附件 ,把附件信息,上传至服务器相关目录中,并记录上传附件的文件信息

    2、有需要替换的字符,则替换为数据库中存在的编码或java内置字符,如性别中男替换为:1,女替换为:0   ,民族中汉族、满族、彝族等替换为数据库中定制的代码,这需要查询数据库 ,.......还有很多需要查询数据库的字段     

    3、校验excel数据是否存在错误,如存在,则需要说明是什么原因出错了,并记录行号、列号

    4、把解析后的数据(直接可以存入数据库的数据)、原数据(Excel中原始数据)、excel标题分别存在session中(目前还没有想到更好的方法,如果用hadoop,应该可以很好的处理)

    5、预览(如果上面的操作没有报错,则在预览时,有可能会报如下错误)

java.lang.OutOfMemoryError: Java heap space
    at java.io.Win32FileSystem.resolve(Win32FileSystem.java:236)
    at java.io.File.<init>(File.java:312)
    at org.apache.naming.resources.FileDirContext.list(FileDirContext.java:899)
    at org.apache.naming.resources.FileDirContext.listBindings(FileDirContext.java:332)
    at org.apache.naming.resources.ProxyDirContext.listBindings(ProxyDirContext.java:516)
    at org.apache.catalina.loader.WebappClassLoader.modified(WebappClassLoader.java:741)
    at org.apache.catalina.loader.WebappLoader.modified(WebappLoader.java:478)
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:399)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1309)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
    at java.lang.Thread.run(Thread.java:619)

网络上的答案总结如下:

A、Tomcat/bin/catalina.bat,添加如下内容
set JAVA_OPTS=-Xms256m -Xmx512m -Djava.awt.headless=true [-XX:MaxPermSize=128M]

B.eclipse->windows->preferences..->tomcat->jvm..->jvm文本框里,添加-Xms256m -Xmx512m

C.eclipse->preference->java->instal jres->edit,增加参数:-Xms256m -Xmx512m

这些我都配置了,而且配置的物理内存比这个更大,不过还是没有解决我的问题,大家有什么好的解决方案吗?我现在是分页预览,不过不想这样处理。。。

原创粉丝点击