2016-04-21 199 views
1

我在Spring Controller中有這個方法,我想確保不會造成內存泄漏。是否,或者不是?直接從Spring Controller返回byte []是否會造成內存泄漏?

​​
+4

爲什麼你會懷疑它呢?什麼是特別關心字節數組而非其他任何事情的原因? –

+0

我用來返回需要文件的FileSystemResource。我想避免不要在每個請求上創建(臨時)文件。由於我做了這個改變,我經常會遇到「OutOfMemoryError:超出GC開銷限制」。 – yglodt

+0

所以你應該在問題中包含這些信息。我懷疑這是返回一個字節數組的問題 - 但這可能是'dmsService'等問題。 –

回答

0

也許更好用org.springframework.core.io.Resource

@ResponseBody 
@RequestMapping(value = "/document/{id}/{filename:.*}", method = RequestMethod.GET) 
public Resource getDownloadEclaimsDocument(@PathVariable("id") final String id, 
     @PathVariable("filename") final String fileName, 
     final HttpServletResponse response,) { 
    final DmsFile dmsFile = dmsService.getByFileSystemId(id); 
    byte[] data = dmsService.getFileAsByteArray(dmsFile); 

    response.setContentType(dmsFile.getContentType()); 
    response.setContentLength(data.length); 
    response.setHeader("Content-Disposition", 
         "attachment; filename=\"" + 
         MimeUtility.encodeWord(dsmFile.getName(), "utf-8", "Q") + "\""); 

    // This call gets a byte[] from a backend service 
    return new ByteArrayResource(data); 
}