파마 스페이스 란?


88

자바 메모리 프로파일 링에 대해 배우는 동안 "힙"외에도 "펌 공간"이라는 용어를 계속 보게됩니다. 힙이 무엇인지 압니다. 파마 공간이 무엇인가요?


13
Java 8은이 개념을 완전히 제거하고 Metaspace로 이동했습니다.
pramodc84

2
참조 는 여기에 잘 설명되어 있습니다. youtube.com/watch?v=PUUJ4rNpRhU
shareef

답변:


103

영구 생성을 의미합니다 .

영구 생성은 사용자 클래스 (Java 언어의 일부가 아닌 클래스)를 설명하는 메타 데이터를 보유하기 때문에 특별합니다. 이러한 메타 데이터의 예로는 클래스와 메서드를 설명하는 객체가 있으며 영구 세대에 저장됩니다. 큰 코드 기반을 가진 응용 프로그램은 힙의이 세그먼트를 빠르게 채울 수 있습니다 java.lang.OutOfMemoryError. PermGen은 -Xmx가 얼마나 높고 컴퓨터에 얼마나 많은 메모리가 있는지에 관계없이 발생 합니다.


Andrew, PerGen의 크기에 대해 알고 싶습니다.
gks

(이 답변에 명시된 바와 같이) 또는 (-이 답변에 명시된대로 힙이 꺼져 permgen 힙 메모리의 일부인 경우 그냥 궁금 stackoverflow.com/a/31103100/3061686 ).
akki

26

Perm space로드 된 클래스 및 String Pool일반적으로 String.intern()메서드에 의해 생성되는 (고도로 최적화 된 문자열 동등성 테스트 용) 과 같은 몇 가지 다른 고급 기능에 대한 정보를 유지하는 데 사용됩니다 . 응용 프로그램 (클래스 수)이 증가함에 따라이 공간의 가비지 수집이 필요에 따라 정리하는 데 그다지 효과적이지 않기 때문에이 공간이 빠르게 채워집니다. 메모리 부족 : perm gen 공간 오류가 발생합니다. 그 후에는 큰 빈 JVM이 있더라도 해당 시스템에서 응용 프로그램이 효과적으로 실행되지 않습니다.

응용 프로그램을 시작하기 전에이 java -XX:MaxPermSize오류를 제거 해야 합니다.


문자열 풀은 자바 7 이후 힙 공간으로 이동합니다.
Caffeine Coder

20

간단하고 (과도하게 단순화 된) 대답 : jvm이 데이터가 아닌 자체 부기 데이터를 저장하는 곳입니다.


17

Perm Gen은 클래스에 대한 메타 데이터 정보를 보유하는 영구 생성을 의미합니다.

  1. 클래스 이름 A를 생성하면 인스턴스 변수가 힙 메모리에 저장되고 클래스 A는 정적 클래스 로더와 함께 영구 생성에 저장됩니다.
  2. 가비지 수집기는 영구 생성 메모리에 저장된 메모리 공간을 지우거나 해제하기가 ​​어렵습니다. 따라서 항상 permgen 메모리 설정을 권장되는 한계로 유지하는 것이 좋습니다.
  3. JAVA8은 메타 공간 생성이라는 개념을 도입 했으므로 jdk 1.8 버전을 사용할 때 더 이상 permgen이 필요하지 않습니다.

5

permgen 공간은 클래스 및 메서드 개체와 같은 가상 머신 자체의 모든 반영 데이터를 보유하는 힙 영역입니다.


3

클래스 정의, 문자열 풀 등과 같은 것들을 보유하고 있습니다. 메타 데이터라고 부를 수있을 것 같습니다.


3

Permgen 공간은 항상 메소드 영역으로 알려져 있으며, 클래스 로더 서브 시스템이 클래스 파일 (바이트 코드)을 메소드 영역 (permGen)에로드 할 때. 여기에는 모든 클래스 메타 데이터가 포함됩니다. 예 : 클래스의 정규화 된 이름, 직계 상위 클래스의 정규화 된 이름, 변수 정보, 생성자 정보, 상수 풀 정보 등.


2

PremGen 아래 존재하는 것 : Class Area는 PremGen 영역 아래에 있습니다. 정적 필드는 클래스 로딩 시간에도 개발되므로 PremGen에도 존재합니다. 문자열처럼 풀링 된 모든 불변 필드가있는 상수 풀 영역이 여기에 유지됩니다. 또한 클래스 로더에 의해로드 된 클래스 데이터, 객체 배열, jvm에서 사용하는 내부 객체도 있습니다.


1

PermGen Space는 영구 생성을위한 메모리 할당을 의미합니다. 모든 Java 불변 객체는이 범주에 속합니다. 예 String를 들어 리터럴 또는 String.intern()메서드로 생성되고 클래스를 메모리에로드하기 위해 생성됩니다 . PermGen Space는 문자열 동등성 검색 속도를 높입니다.


1
  • JVM에는 Java 객체의 내부 표현이 있으며 이러한 내부 표현은 힙에 저장됩니다 (젊은 세대 또는 종신 세대).
  • JVM에는 또한 Java 클래스의 내부 표현이 있으며 영구 생성에 저장됩니다.

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.