错误java.lang.OutOfMemoryError:java堆空间
记录可以从网站上获得并显示在屏幕上,或者文件可以以csv格式下载。 当arrayList有超过60000个寄存器时,它会给出错误信息错误java.lang.OutOfMemoryError:java堆空间,java,Java,记录可以从网站上获得并显示在屏幕上,或者文件可以以csv格式下载。 当arrayList有超过60000个寄存器时,它会给出错误信息 java.lang.OutOfMemoryError:java堆空间 我做错了什么 这是密码 HTML 函数getFile(){ 成功:功能(数据){ 如果(data.estado==“成功”){ 下载(data.nombre,data.file); } } 函数下载(文件名、数据){ var-element=document.createElement('a')
java.lang.OutOfMemoryError:java堆空间
我做错了什么
这是密码
HTML
函数getFile(){
成功:功能(数据){
如果(data.estado==“成功”){
下载(data.nombre,data.file);
}
}
函数下载(文件名、数据){
var-element=document.createElement('a');
element.setAttribute('href',data);
setAttribute('download',filename);
element.style.display='none';
document.body.appendChild(元素);
元素。单击();
document.body.removeChild(元素);
}
爪哇
ArrayList listado=新的ArrayList();
试一试{
listado=dao.getRegistrosFile();
如果(listado.size()>0){
字符串文件=crearArchivo(listado);
json.put(“estado”,“success”);
put(“file”,file);
}
私有字符串crearArchivo(列表)引发异常{
StringBuilder archivo=新的StringBuilder();
用于(对象vo:列表){
archivo.append(vo.getxxx+”;“+vo.getxxxx+”;“+vo.getxxxx+”\n”);
}
byte[]bytesEncoded=Base64.encodeBase64(archivo.toString().getBytes());
字符串文件=csv+新字符串(字节编码);
返回文件;
}
错误
]]ServletException的根本原因。
java.lang.OutOfMemoryError:java堆空间
在java.lang.StringCoding$StringDecoder.decode(StringCoding.java:149)
在java.lang.StringCoding.decode(StringCoding.java:193)
在java.lang.StringCoding.decode(StringCoding.java:254)
位于java.lang.String。(String.java:546)
位于java.lang.String。(String.java:566)
已截断。有关完整的堆栈跟踪,请参阅日志文件
>
Java程序中可用的内存是有限的,此错误表示程序中所有可能的内存都已用完。Java对象与内存空间绑定,因此当您不断向字符串中添加更多记录时,它占用的空间就越大。根据每条记录的大小,将它们附加到字符串中记忆会很快被吞没
解决这个问题的一个方法是,在遍历记录列表时,将记录分块写入最终文件。这将把部分任务转移到磁盘空间,而不是完全依赖内存
下面是一个使用文件写入的快速示例:
File csv = new File( "xxx" );
FileWriter writer = new FileWriter( csv );
for (Object vo : list) {
writer.write(vo.getxxx+";"+vo.getxxxx+";"+vo.getxxxx+"\n");
}
相关:这回答了你的问题吗?只是为了获得一些建设性的反馈,也许一些基于初始代码的示例代码可以帮助OP更好地理解。
ArrayList<ExcedentesVO> listado = new ArrayList<ExcedentesVO>();
try{
listado = dao.getRegistrosFile();
if(listado.size() > 0){
String file = crearArchivo(listado);
json.put("estado","success");
json.put("file", file);
}
private String crearArchivo(List<ExcedentesVO> list) throws Exception {
StringBuilder archivo = new StringBuilder();
for (Object vo : list) {
archivo.append(vo.getxxx+";"+vo.getxxxx+";"+vo.getxxxx+"\n");
}
byte[] bytesEncoded = Base64.encodeBase64(archivo.toString().getBytes());
String file = csv+new String(bytesEncoded);
return file;
}
]] Root cause of ServletException.
java.lang.OutOfMemoryError: Java heap space
at java.lang.StringCoding$StringDecoder.decode(StringCoding.java:149)
at java.lang.StringCoding.decode(StringCoding.java:193)
at java.lang.StringCoding.decode(StringCoding.java:254)
at java.lang.String.<init>(String.java:546)
at java.lang.String.<init>(String.java:566)
Truncated. see log file for complete stacktrace
>
File csv = new File( "xxx" );
FileWriter writer = new FileWriter( csv );
for (Object vo : list) {
writer.write(vo.getxxx+";"+vo.getxxxx+";"+vo.getxxxx+"\n");
}