Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 导出大量数据和内存溢出_Java_Memory_Overflow - Fatal编程技术网

Java 导出大量数据和内存溢出

Java 导出大量数据和内存溢出,java,memory,overflow,Java,Memory,Overflow,我在计算机中使用eclipse导入了100多个数据,没有问题。但当我在应用服务器上部署时,它将耗尽内存,我复制本地tomcat 这是什么问题 在另一个函数中,该日期比此日期多出数百万,而字段仅为少数。它可以正常输出 int totalSize = behaviorPortraitService.querySiletUserPortraitCountMonth(sietUserPortraitForm.getParams()); int pageNum = 0; if (totalSize % 1

我在计算机中使用eclipse导入了100多个数据,没有问题。但当我在应用服务器上部署时,它将耗尽内存,我复制本地tomcat

这是什么问题

在另一个函数中,该日期比此日期多出数百万,而字段仅为少数。它可以正常输出

int totalSize = behaviorPortraitService.querySiletUserPortraitCountMonth(sietUserPortraitForm.getParams());
int pageNum = 0;
if (totalSize % 1000000 == 0) {
    pageNum = totalSize / 1000000;
}else{
    pageNum = totalSize / 1000000 + 1;
}

write.append("        year/month          IMSI                 phone number     The date of open card"
        + enter);
outSTr = response.getOutputStream(); // establish
buff = new BufferedOutputStream(outSTr);
// Loop total number of pages,Get the number of pages per page
for (int i = 1; i <= pageNum; i++) {
    // According to the number of pages to get PageResult object
    list = behaviorPortraitService.exportSiletUserPortraitMonth(sietUserPortraitForm.getParams(),i,100000);
    // circulate List collection to write
    for (int j = 0; j < list.size(); j++) {
        // Recycling collection,Write data to the TXT
        write.append(list.get(j).getBegin_endtime());
        write.append("  " + list.get(j).getImsi());
        write.append("  " + list.get(j).getMsisdn());
        write.append("  "+ list.get(j).getSilencedays());
        write.append("  " + list.get(j).getStarttime()
                + enter);
    }
    // After writing a page object,empty List,wipe cache 
    list.clear();
    System.gc();
}

buff.write(write.toString().getBytes("UTF-8"));

您正在创建一个非常大的字符串,并将其转换为非常大的字节[]

我建议逐步将数据写入输出流,而不是执行这两种操作。i、 e.不要使用
write.append
只需使用buf.write作为二进制文件,或者如果要编写文本,请使用

PrintWriter pw = new PrintWriter(new OutputStreamWriter(
                 new BufferedOutputStream(socket.getOuptutStream()), "UTF-8"));

pw.print( some text here );
pw.print( some more ext here );
pw.println( the end of the line );

pw.close(); // when finished.
这根本不会占用太多内存

PrintWriter pw = new PrintWriter(new OutputStreamWriter(
                 new BufferedOutputStream(socket.getOuptutStream()), "UTF-8"));

pw.print( some text here );
pw.print( some more ext here );
pw.println( the end of the line );

pw.close(); // when finished.