2012-05-04 5 views
2

파일에서 많은 양의 데이터를 읽고이를 Excel 파일에 쓰는 코드가 있습니다. 문제는 데이터가 힙 크기 한계를 넘어 서면 메모리 부족 예외가 발생한다는 것입니다. 힙 크기를 늘리려고 시도하고 프로그램이 정상적으로 실행되었습니다. 그러나 문제는 내 컴퓨터에 제한된 RAM이 있고 힙에 엄청난 공간을 할당하면 컴퓨터가 매우 느려지 게된다는 것입니다. 그럼, 내 코드를 실행하기 위해 힙 크기를 늘리지 않아도되도록 데이터의 일부 한계를 처리 한 후 메모리를 비울 수있는 방법이 있습니까? 이런 것들에 비교적 새로운 점이 있으니 약간의 아이디어를 제안 해주세요.피할 수있는 방법 이클립스에서 힙 크기를 늘리지 않고 메모리 부족 예외가 발생했습니다.

+0

데이터를 읽고 쓰는 코드의 작은 버전을 보여줍니다 (단, 필요한 다른 모든 것들은 아니지만 가능한 한 작게 만드십시오). 행동) 우리는 그것에 대해 논평 할 수 있습니다. – Nanne

+0

http://stackoverflow.com/questions/2356137/read-large-files-in-java이 문제를 살펴보십시오. –

+0

여러 파일에서 데이터를 읽고이를 한 번에 Excel 파일에 써야합니다. –

답변

2

이런 경우에는 코드를 재구성하여 작은 덩어리의 데이터로 작업해야합니다. 작은 버퍼를 만들고, 데이터를 읽어 들여 처리하고, Excel 파일에 씁니다. 그런 다음 동일한 반복을 읽고 다음 반복을 계속하십시오.

물론 사용중인 Excel 라이브러리는 이와 같이 작동 할 수 있어야하며 전체 파일을 한 번에 작성하지 않아도됩니다.

0

DirectByteBuffer를 Buffer.allocateDirect (byteSize)와 함께 사용할 수 있습니다. 또는 MemoryMappedFile을 사용하면 힙 메모리의 메모리 공간을 사용합니다.

+0

그러나 직접 버퍼를 할당하면 OS/아키텍처/하드웨어에 의해 부과 된 메모리 제한을 초과하면 OutOfMemoryError가 발생할 수도 있습니다. 그리고 이것은 OP에서 그의 기계가 RAM이 부족하다고 말하기 때문에 이런 경우에 일어날 수 있습니다. –

+0

그래서 데이터를 영구 저장 장치 (HDD)에 저장하거나 저장하거나, Gson을 사용하여 데이터를 디스크에 저장할 수 있습니다 – UsTa

관련 문제