Programming/Java

JDBC를 이용해 대용량 데이터 처리시 OOM(Out of memory, Java heap space 문제) 해결

Lawmin 2012. 1. 12. 10:01
ResultSet을 가지고 한줄씩 disk 로 쓰면서 사용된 객체를 정리하는 것을 반복하더라도 OOM 나면서 죽는 경우,

Statement 를 생성할 때 Cursor 옵션에 문제가 있을 수 있다.

TYPE_SCROLL_SENSITIVE,  TYPE_SCROLL_INSENSITIVE 로 Scrollable하게 만들면 내부적으로 Vector를 사용해 읽어온 데이터를 Caching 하게 되며 gc 되지 않는다.

TYPE_FORWARD_ONLY, CONCUR_READ_ONLY 를 지정하여 Cache 되지 않도록 하면,

OOM 을 피할 수 있다. 단, Scrollable Cursor 를 이용하던 로직은 불가능하거나 수정할 필요가 있다.