블로그 이름

[ERROR] org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: GC overhead limit exceeded) 본문

개발/오류

[ERROR] org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: GC overhead limit exceeded)

Hide 2025. 8. 31. 17:24

에러 로그는 다음과 같다.

org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: GC overhead limit exceeded)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)

...
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded

 

CPU 사용량 중 98% 이상 GC가 작동되는 경우 GC Overhead limit exceeded가 발생된다. 한정된 Heap Memory 안에서 GC 대상 객체는 없지만 새롭게 생성되는 객체가 메모리를 할당받지 못하는 경우에 GC 시간이 길어지게 된다.

 

map에 계속해서 데이터를 넣는 중 메모리 부족으로 발생한 에러.

 

해결방법

1. GC overhead limit exceeded Option 종료

-XX:-UseGCOverheadLimit

해당 부분은 비추천 하는 방법으로, GC overhead limit exceeded가 왜 나왔는지 원인을 파악하여  최적화 하는 것이 낫다.

 

2. Heap 메모리 설정

java -Xmx1024m com.경로.클래스

제일 간단한 방법으로 힙 메모리를 늘려주는 방법이다. 데이터 읽는 건이 ㅁ낳을 경우 -Xmx 로 최대 Heap 메모리 설정하여 주면 된다.

 

Heap 메모리 늘리는 것으로 해결되었다.