Cómo corregir un error `Java heap space` al descargar archivos grandes (GB) con Liferay
Estoy usando este código para descargar un archivo existente del servidor en Liferay (6.2) en una PC local:
`
File file = getFile(diskImage.getImageType(), diskImage.getId());
HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(request);
HttpServletResponse httpResp = PortalUtil.getHttpServletResponse(response);
httpResp.setContentType("application/octet-stream");
httpResp.setHeader("Content-Transfer-Encoding", "binary");
httpResp.setHeader("Content-Length", String.valueOf(file.length()));
httpResp.setHeader("Content-Disposition", "attachment; filename=" + file.getName());
try (InputStream input = new FileInputStream(file)) {
ServletResponseUtil.sendFile(httpReq, httpResp, file.getName(), input, "application/octet-stream");
} catch (Exception e) {
throw new FilesManagerException(e);
}
}
`
Este código funciona bien solo para archivos pequeños. Pero la descarga de archivos grandes (cca 2GB) arrojajavax.portlet.PortletException: Error occurred during request processing: Java heap space
.
¿Cómo arreglar este código para que también funcione correctamente para archivos más grandes? Supongo que el enfoque adecuado sería usar algún tipo de búfer para archivos grandes y lo intento, pero no funcionaría incluso para los archivos más pequeños después.