[java] 파마 스페이스 란?

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



답변

영구 생성을 의미합니다 .

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


답변

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

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


답변

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


답변

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

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


답변

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


답변

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


답변

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