영구 생성 힙 공간 및 메타 공간

Sarwan Soomro 2024년2월16일
  1. Java의 영구 생성 힙 공간
  2. Java에서 PermGen의 주요 특성
  3. Java의 PermGen 대 메타스페이스
  4. 메타스페이스(자바 8)
  5. 요약
영구 생성 힙 공간 및 메타 공간

JVM 메모리 공간에 대한 이 간단한 데모에서는 Java 가상 머신이 사용자 데이터 메모리 할당을 처리하는 방법을 살펴봅니다. 이 주제를 그래프로 다루지는 않겠지만 이는 다소 기본적이며 우리의 설명이 명확성을 형성하는 데 충분할 것이라고 믿습니다.

또한 PermGen을 Metaspace 및 둘 다와 비교할 것입니다. 이 간단한 문서에는 많은 정보가 포함되어 있으므로 계속 읽으면서 자세한 내용을 알아보세요.

Java의 영구 생성 힙 공간

PermGen은 JVM(Java Virtual Machine)에서 사용하는 짧은 형태의 영구 생성 힙 공간입니다. 모든 클래스, 메서드, 개체, 내부화된 문자열 등을 차지하는 공간입니다.

대부분의 애플리케이션에서 영구 생성은 가비지 수집기 효율성에 눈에 띄는 영향을 미치지 않습니다. 그럼에도 불구하고 일부 애플리케이션은 JSP와 같은 많은 클래스를 동적으로 생성하고 로드합니다.

메모
해당 앱은 추가 클래스를 수용하기 위해 더 큰 영구 세대가 필요할 수 있습니다.

이러한 경우가 발생하면 명령줄을 사용하여 MAX: PermGen 크기를 늘릴 수 있습니다. MAX 증가 명령: PermGen 크기: -XX:MaxPermSize=SIZE, -XX:PermSize=[size].

그러나 여기서 한 가지 명심해야 할 것이 있습니다. Java가 Java Development Kit 버전 8 릴리스에서 이 메모리 공간을 제거했기 때문에 Java 8 이상에서 이러한 조정 플래그를 사용하면 이러한 경고가 표시됩니다.

>> java -XX:PermSize=100m -XX:MaxPermSize=200m -version
OpenJDK 64-Bit Server VM warning: Ignoring option PermSize; support was removed in 8.0
OpenJDK 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0

Java에서 PermGen의 주요 특성

PG는 전체 가비지 수집에도 포함됩니다.

  1. JVM 클래스 메타데이터를 위한 공간.
  2. 핫스팟에서 Java 클래스의 내부 표현.
  3. 클래스 구조, 필드 및 식별자에 대한 정보.
  4. 메소드 컴파일 및 바이트코드에 대한 정보.
  5. 변수
  6. 상시 작동 풀 및 상징적 해상도.

PermGen의 일반적인 문제:

  1. MaxPermSize에 대한 제한된 메모리.
  2. 더 큰 MaxPermSize로 인해 재시작이 발생했습니다.
  3. 메모리 부족 오류 문제.
  4. 애플리케이션 참조로 인해 클래스 언로드가 트리거되었습니다.
  5. MaxPermSize(64MB에서 85MB까지만 해당).

이러한 문제 외에도 여기에서 읽어야 할 다른 문제가 있습니다: 1, 2.

Java의 PermGen 대 메타스페이스

Java 8 이후로 PermGen이 Metaspace로 대체되는 것을 보았습니다. 이 변화에도 약간의 차이가 있었습니다.

예를 들어 Metaspace에는 무제한 기본 최대 크기가 있지만 전자에는 없습니다. 공식 문서를 읽으면 PermGen의 기본 최대 크기가 32비트 JVM에서 64MB라는 것을 알 수 있습니다.

마찬가지로 Java 7 및 이전 버전의 64비트 JVM에는 82MB가 있습니다. 그러나 이제 메모리 부족 오류가 더 이상 문제가 되지 않는다는 것을 알고 있습니다.

대신 메타스페이스를 탐색해야 하지 않겠습니까? 분명히 그렇습니다.

메타스페이스(자바 8)

이전 메모리 공간과 이 공간 사이의 가장 중요한 차이점을 이미 표시했으므로 Java VM이 클래스, 메서드, 변수, 문자열 등과 같은 메모리를 보관하는 컨테이너로 간주하십시오.

그럼 지체 없이 Metaspace의 차이점을 알아볼까요?

다음 표는 Metaspace와 PermGen을 비교 및 대조합니다.

S.N 영구 세대 메타스페이스
1 PermGen 공간은 Java 8에서 제거되었습니다. Java 8과 함께 릴리스된 새로운 공간 메타스페이스가 이를 대체했습니다.
2 이름에서 알 수 있듯이 항상 일정한 메모리 크기를 가졌습니다. 운영 체제에 따른 동적 메모리 할당.
비효율적인 가비지 수집기(GC). 효과적인 GC
메모
PermGen 메모리 부족 오류는 Metaspace로 교체한 이후 더 이상 문제가 되지 않습니다.

그럼에도 불구하고 이에 대해 더 알고 싶다면 Virtual Machine Garbage Collection Tuning 링크를 참조하십시오.

요약

간단하고 핵심적인 기사였지만 영구 생성 및 메타스페이스 메모리 공간, 가비지 수집기의 역할 및 JVM이 이들 모두를 구조화하는 방법에 대한 간략한 특성을 제시했습니다.

그 외에도 실시간 사례로 각각을 차별화하고 유용한 참고 자료를 인용했습니다. 간단히 말해서 영구 생성은 JDK 7 및 이전 버전에 여전히 존재합니다.

반면에 Metaspace는 애플리케이션에 보다 안정적이고 유연한 메모리 공간을 제공합니다.

Sarwan Soomro avatar Sarwan Soomro avatar

Sarwan Soomro is a freelance software engineer and an expert technical writer who loves writing and coding. He has 5 years of web development and 3 years of professional writing experience, and an MSs in computer science. In addition, he has numerous professional qualifications in the cloud, database, desktop, and online technologies. And has developed multi-technology programming guides for beginners and published many tech articles.

LinkedIn