2

Java 웹 응용 프로그램에서 Pdf를 작성했으며이를 전자 메일 첨부 파일로 보내고 있습니다. Pdf는 byte[] 배열로 생성됩니다. ByteArrayInputStream에 포장하는 것이 더 좋습니까 아니면 byte[]으로 남겨 두어야합니까?Java 메모리 최적화 (메모리 누수를 피하는 방법 - 구체적인 예)

(this 스레드에서 허용 대답을 읽기)가 메모리 해제에 대한 더 좋을 수도 포장하지만, 단점은 (here 읽기)를 InputStream이 (내가 경우 오른쪽) 배열의 복사본을 생성하는 것입니다.

메모리 혹이 발생할 가능성을 피하기 위해 더 좋은 방법은 무엇입니까?

+2

"Memory Hug"- 내 새로운 좋아하는 문구! –

+0

가비지 수집 환경에서 메모리 누수가 걱정되는 이유는 무엇입니까? JVM에서 메모리 누수가 발생하는 특정 버그에 대해 알고 있지 않는 한 그런 언급은하지 않았습니다. –

+0

나는 메모리 돼지를 의미 .... :) – Atticus

답변

3

아니요, ByteArrayInputStream은 배열을으로 바꿉니다. 복사하지 않습니다. the documentation (byte[] 복용 생성자)에서 : buf를 버퍼 배열로서 사용하도록

는이 InputStream를 생성한다. 버퍼 배열은 복사되지 않습니다. pos의 초기 값은 0이고 count의 초기 값은 buf의 길이이다.

입력 스트림이 복사됩니다 사용 무엇이든 가능하지만 자체는하지 않습니다 ByteArrayInputStream.

저는 특히 중요한 문제에 대해 정말로 걱정하고 있다고 확신하지 않습니다. 바이트 배열을 사용하여 실제로 메모리 누수가 발생하지는 않을 것이라고 생각합니다.

+0

나는 메모리 hogs에서 webapp를 저장하기 위해 InputStream 대신에 byte []를 사용하는 것에 대한 답을 읽고 있었고, 이것이 정말로 문제인지는 알지 못했다. – Atticus

+0

@Atticus : 필자는 왜 그 대답의 저자가 * "기억의 돼지"라고 주장했는지 이해하지 못하면서 문제가 될 것이라고 생각하지 않을 것입니다. 데이터를 모두 메모리에 복사하는 대신 스트리밍 할 수있는 것으로 의심됩니다.하지만 상황에 따라 적절하지 않을 수도 있습니다. 다른 답변의 컨텍스트와 해당 컨텍스트가 적용되는지 여부를 이해하는 것이 중요합니다. –

관련 문제