JAVA

이클립스 메모리 부족 에러/ 이클립스 메모리 Heap 영역 늘리는 방법

묘나 2021. 5. 3. 16:02
728x90
반응형
SMALL

이클립스의 시스템 과부화 및 메모리 부족 현상이 발생했을 때의 해결 방법이다.

 

JVM이 일반적으로 실행되는 영역은 Heap 영역이고,

이는 JVM이 메모리 영역을 사용한다는 의미이다.

그러므로, Heap 영역과 PermGen 영역의 사이즈를 늘려 주어 보다 원활하게 이클립스를 사용하는 것이 권장된다.

 

 

* Heap 영역이란..? + Stack 영역..!

 

- Stack

  • Heap 영역에 생성된 Object 타입(Integer, String, ArrayList, ...)의 데이터의 참조값이 할당된다.
  • 원시 타입(Primitive types : byte, short, int, double, float 등..)의 데이터가 값과 함께 할당된다.
  • 지역변수들은 scope 에 따른 visibility 를 가진다.
  • 각 Thread 는 자신만의 stack 을 가진다.

object 타입과 달리, 원시 타입에 대해서는 참조값이 아니라 실제 데이터 값을 stack에 직접 저장하게 된다.

 

Stack 영역에 있는 변수들은 visibility 를 가진다.

변수 scope 에 대한 개념이다.

전역변수가 아닌 지역변수가 foo() 라는 함수내에서 Stack 에 할당 된 경우, 해당 지역변수는 다른 함수에서 접근할 수 없다. 

 

Stack 메모리는 Thread 하나당 하나씩 할당된다.

즉, 스레드 하나가 새롭게 생성되는 순간 해당 스레드를 위한 stack 도 함께 생성되며, 각 스레드에서 다른 스레드의 stack 영역에는 접근할 수 없다.

 

 

- Heap

  • Heap 영역에는 주로 긴 생명주기를 가지는 데이터들이 저장된다. (대부분의 오브젝트는 크기가 크고, 서로 다른 코드블럭에서 공유되는 경우가 많다)
  • 애플리케이션의 모든 메모리 중 stack 에 있는 데이터를 제외한 부분이라고 보면 된다.
  • 모든 Object 타입은 heap 영역에 생성된다.
  • 몇개의 스레드가 존재하든 상관없이 단 하나의 heap 영역만 존재한다.
  • Heap 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수가 stack 에 올라가게 된다.

 

* PermGen 영역이란..?

 

PermGen은 Permanent Generation의 약자.

PermGen은 JDK 1.7 이하 버젼에서 존재했었다.

이곳은 클래스 메타 데이터가 들어갈 곳인데, 이 공간의 크기는 예측하기가 어려웠다.

자바에서는 클래스의 메타데이터를 읽고 해당 메타데이터를 통해 객체를 생성할 수 있다.

 

(클래스 메타데이터란? : 클래스의 이름, 생성정보, 필드정보, 메서드 정보 등)

 

그렇기 때문에,

자바로 프로그램을 짜다 운영(장시간)하다 보면 PermGen에 OutOfMemory라는 예외를 경험하게 된다.

PermGen영역은 OS, JVM버젼마다 각기다른 default값을 가지고 있으며,

대부분 매우 작게 할당되어 있다.

그렇기 때문에 클래스 로딩을 많이하다보면 PermGen이 부족할때 위와 같은 에러가 발생할 수도 있다.

 

JDK 1.8부터 PermGen영역이 없으며 Metaspace로 완벽하게 대체되었다.

Metaspace는 클래스 메타 데이터를 native메모리에 저장하고 부족할경우 자동으로 늘려준다.

그래서 더이상 PermSize, MaxPermSize를 설정할 필요가 없어졌고,

MetaspaceSize나 MaxMetaspaceSize가 새롭게 사용된다.

 

 

이렇게 이클립스 메모리 부족 에러와 관련한 기본 개념을 익혔으니, 이제 에러를 해결해보자.

 

1) eclipse.ini 파일 수정

이클립스가 설치된 폴더로 이동해, eclipse.ini 파일을 연다.

이런식으로 작성된 파일이 열릴 것이다.

이 파일에서 이 부분을 고쳐주면 된다.

 

-Xms : Heap 영역 최소 크기

-Xmx : Heap 영역 최대 크기

 

이 부분을 원하는 만큼 메모리를 할당해 주면 된다.

그러나, -Xms 크기가 -Xmx 크기보다 커서는 안된다.

 

2) eclipse.ini 파일 저장

 

3) 이클립스 실행

 

4) 제대로 변경되었는지 확인

 

Window -> Preference -> General

-> 체크 박스 Show heap status 체크

-> Apply -> Ok 클릭

 

5) Heap 사이즈 확인

 

728x90
LIST