此问题如下:
在公司程序中,有可能web服务器的内存小了,出现java.lang.OutOfMemoryError
本人检查了程序,有以下几行认为会有不妥当,请大家给个建议:
方法:private void genExcelReport(Document doc, String reportName,
File templateDir, String templateName, String saveDir, String fileName)
throws Exception {....
XMLOutputter xmlOut = new XMLOutputter();
String xml = xmlOut.outputString(doc); --本人认为这个有点问题
reader = new StringReader(xml);
....}
这里的doc是一个很大的对象,大概有10的样子吧,所以这个xml对象应该也有
10 m左右,我想把它改成StringBuffer,或者StringBuilder有没有更好些,
如:
StringBuffer xml=xmlOut.outputString(doc);
reader = new StringReader(xml.toString);
在公司程序中,有可能web服务器的内存小了,出现java.lang.OutOfMemoryError
本人检查了程序,有以下几行认为会有不妥当,请大家给个建议:
方法:private void genExcelReport(Document doc, String reportName,
File templateDir, String templateName, String saveDir, String fileName)
throws Exception {....
XMLOutputter xmlOut = new XMLOutputter();
String xml = xmlOut.outputString(doc); --本人认为这个有点问题
reader = new StringReader(xml);
....}
这里的doc是一个很大的对象,大概有10的样子吧,所以这个xml对象应该也有
10 m左右,我想把它改成StringBuffer,或者StringBuilder有没有更好些,
如:
StringBuffer xml=xmlOut.outputString(doc);
reader = new StringReader(xml.toString);
解决方案 »
- 求jquery+ajax+struts2 注册时异步提示用户名是否存在的代码
- 想在节点node下再加入一个子节点 变成三层树结构 该怎么办呀
- 用jsp+javaBean编写登录界面
- 静态变量与servletcontext存储全局变量那个更好,大家说说自己的理解
- web多线程问题
- 100分问commons-fileupload 1.1组件上传时如何修改文件名,解决马上给分,顶者有分,给代码在在单独给100分。
- 急,搞一了周还没有做出来 jsp+javabean+mysql2k
- su27007进来领分:关于JFreeChart在Solaris,JDK1.3环境下出现错误:Can't connect to X11 window server using ':0.0'
- 动态菜单
- 中文問題
- 会EXT的进来给点思路??
- 急!tomcat 报 org.apache.tomcat.util.threads.ThreadPool logFull
对,长XML文件,不建议直接用 String 来解析。
// Generate XML document
Document doc = genXMLDoc(list); 这个list是从数据库读出来的,大小2200左右,list存放是一个属性比较多的对象(InsuranceEWLogBO ),大概25个属性,都是String类型
public class InsuranceEWLogBO {
....
private String dealerName; private String dealerNameEn; private String status; private String brand; private String model;
....}我是把数据读出的数据,解析成xml文件,然后在生产excel文件。
如果换成sax解析的话,好像成本太高,所以的解析都要改变。
现在问下,下面那个好点
1.
StringBuffer xml=xmlOut.outputString(doc);
reader = new StringReader(xml.toString);
2.
String xml = xmlOut.outputString(doc); --本人认为这个有点问题
reader = new StringReader(xml);
1比2好么?
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class TestBigString {
public static void main(String[] args) {
// TODO Auto-generated method stub
TestBigString tb = new TestBigString();
try{
String str=tb.fileReader("d:\\test.txt");
if(str==null||!str.equals("")){
System.out.println("Get string is right");
}
else
System.out.println("error is happen!");
}catch(Exception e){
e.printStackTrace();
}
}
public String fileReader(String filePath) {
StringBuffer sb = new StringBuffer();
File file = new File(filePath);
try {
FileReader fr = new FileReader(file);//创建FileReader对象,用来读取字符流
BufferedReader br = new BufferedReader(fr); //缓冲指定文件的输入 while (br.ready()) {
sb.append(br.readLine()+"\n");
} br.close();
br.close();
fr.close(); } catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
}
test.txt这个文件70m的时候,没有啥问题,
140m的时候就报了io错误,但是也没有java.lang.OutOfMemoryError
Get string is right
java.io.IOException: Data error (cyclic redundancy check)
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder$CharsetSD.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at TestBigString.fileReader(TestBigString.java:34)
at TestBigString.main(TestBigString.java:16)
在eclipse--run的时候加入了VM argument: -Xms32m -Xmx800m