본문 바로가기
Java/POI

POI #3 [XSSFWorkbook - Memory Leak]

by Lee David 2020. 7. 10.
반응형

Memory Leak

메모리는 프로세스가 종료됨과 동시에 할당된 메모리를 비우지 못하고 점유하고 있는 현상입니다.

결과는 메모리의 한계점에 다다를 수록 OS의 모든 프로세스가 느려지기 시작합니다.

 

POI도 메모리 릭을 무시 할 수 없는데요. 다른건 모르지만 이번 프로젝트를 진행하면서 XSSFWorkbook을 사용할 때마다 메모리 누수가 일어나 원인을 찾느라 고생했습니다.

 

내용을 보자하면 XSSFWorkbook이 sheet와 하위의 row, cell 등을 파싱할 때에 한 sheet당 최대량이 60mb 정도이며 상위로 가면 라이브러리 내부에서 TreeMap에 나머지 내용을 적재합니다.

 

이때 close 하면 되잖아? 라고 생각하시겠지만 TreeMap은 이미 저멀리 메모리에서 둥둥 떠다닙니다.

 

이렇게 쌓이고 쌓이면 메모리가 가득차게 됩니다.

 

여러가지 해결 방법이 있지만 아래 스택 오버 플로우가 가장 잘 설명 되어 있네요.

https://stackoverflow.com/questions/53690493/java-read-process-write-with-large-excel

 

Java - read, process, write with large excel

I have a large spread sheet. It has 10 sheets, each with 1m rows. With Java, I need to run an algorithm for each row, return a value for each row and insert back into the excel file. My idea was to

stackoverflow.com

내용은 StreamingReader를 사용하면 해결 된다고 하지만 실상은 JVM 메모리 점유 사이즈를 excel 크기 즉 row에 맞게  설정해 주는게 중요 포인트라고 합니다.

반응형

'Java > POI' 카테고리의 다른 글

POI #2 [HSSFWorkbook - write & read]  (0) 2020.06.30
POI #1 [ POIFSFileSystem vs OPCPackage ]  (0) 2020.06.29
POI #0  (0) 2020.06.26