Programing

파마 공간이란?

lottogame 2020. 9. 18. 19:14
반응형

파마 공간이란?


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


영구 생성을 의미합니다 .

영구 생성은 사용자 클래스 (Java 언어의 일부가 아닌 클래스)를 설명하는 메타 데이터를 보유하기 때문에 특별합니다. 이러한 메타 데이터의 예로는 클래스와 메서드를 설명하는 객체가 있으며 영구 세대에 저장됩니다. 코드 기반이 큰 응용 프로그램은 힙의이 세그먼트를 빠르게 채울 수 있으며, 이로 인해 java.lang.OutOfMemoryErrorPermGen은 -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)에로드 할 때. 여기에는 모든 클래스 메타 데이터가 포함됩니다. 예 : 클래스의 정규화 된 이름, 직계 상위 클래스의 정규화 된 이름, 변수 정보, 생성자 정보, 상수 풀 정보 등.


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


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


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

참고 URL : https://stackoverflow.com/questions/1279449/what-is-perm-space

반응형