Java SpringBoot:我应该关闭体流http客户端吗
我编写了以下代码片段:Java SpringBoot:我应该关闭体流http客户端吗,java,spring-boot,memory-leaks,stream,Java,Spring Boot,Memory Leaks,Stream,我编写了以下代码片段: ReferenceComposition reference = this.restTemplate.execute(uriToCall, HttpMethod.GET, null, clientHttpResponse -> this.extractReferenceFromResponse( this.getReferenceHeader(clientHttpResponse), this.getR
ReferenceComposition reference = this.restTemplate.execute(uriToCall, HttpMethod.GET, null, clientHttpResponse ->
this.extractReferenceFromResponse(
this.getReferenceHeader(clientHttpResponse),
this.getReferenceStream(clientHttpResponse.getBody())
)
);
调用this.extractReferenceFromResponse(..)
后,是否应关闭clientHttpResponse.getBody()返回的InputStream
getReferenceStream
仅使用InputStream
创建临时文件
getReferenceStream
是:
/**
* Creates a temporarily file.
* @param referenceStream response stream
* @return Temp created file
*/
private InputStream getReferenceStream(InputStream referenceStream) {
try {
File tmpReferenceFile = File.createTempFile("reference", "tmp");
OutputStream contentOutputStream = new FileOutputStream(tmpReferenceFile);
StreamUtils.copy(referenceStream, contentOutputStream);
contentOutputStream.close();
InputStream referenceContentStream = FileUtils.openInputStream(tmpReferenceFile);
return referenceContentStream;
} catch (IOException e) {
throw new ...
}
}
您是否检测到任何可能的内存泄漏
注意:我知道我正在返回一个openInputStream referenceContentStream
。除了上面的代码片段之外,它会在稍后关闭。通常的方法是打开流的人应该关闭它或指示以后如何处理该流。您提到流稍后会关闭,所以应该可以。你对这段代码有什么具体的问题吗?我们在docker容器中运行这项服务,并检测到一些“内存泄漏”问题。我们已经尝试在本地监控那些docker服务,但我们无法复制它。。。我们正在从另一个服务接收文件,当该服务接收到文件时,RAM会增加,但不会“恢复”。。。