본문 바로가기
[개발] Programming/Java

GC overhead limit exceeded, String 대신 StringBuilder 사용 등 해결 방법

by eatyourKimchi 2018. 11. 9.

오류 중에 'Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded' 는

메모리 한계를 초과 했기 때문에 발생한다.


두 가지 해결 방법은 다음과 같다.



-Xmx 옵션으로 메모리를 더 할당.


메모리가 부족하여 가비지 컬렉션이 이루어 졌으나, 

새로 확보된 메모리가 전체 메모리의 2% 미만이어서 생기는 오류.

더 이상 가비지 컬렉션을 할 수 없을 정도로 메모리를 사용한다는 것. 


기존) java -Xms1g -Xmx1g -jar Project.jar

해결) java -Xms4g -Xmx4g -jar Project.jar




String 대신 StringBuilder를 사용 


: 문자열에 여러 가지 조작을 가할 경우 변하지 않는 문자열의 경우, String을 사용하면 된다. 

String을 사용하여도 컴파일러가 적당히 변환해 준다고는 하지만, 컴파일러가 완벽하지는 하다. 




참고


- 실행 속도 

StringBuilder > StringBuffer >> String   


- 메모리 사용량

StringBuilder = StringBuffer << String 




자세한 비교는 http://hongsgo.egloos.com/2033998 


출처: http://donzbox.tistory.com/531


댓글