jvm 시리즈 2-jvm의 런타임 메모리

        GC의 관점에서 Java 힙은 새로운 세대(Eden 영역, From Survivor 영역 및 To Survivor 영역)와 Old 세대로 세분화될 수도 있습니다.

  1. 새로운 세대

    새로운 객체를 저장하는 데 사용됩니다. 일반적으로 힙 공간의 1/3을 차지합니다. 빈번한 객체 생성으로 인해 새로운 세대에서는 가비지 수집을 위해 MinorGC를 자주 트리거합니다. 신세대는 Eden 영역, ServivorFrom, ServvivorTo의 세 가지 영역으로 나누어집니다.
    1. 에덴 디스트릭트

      새로운 Java 객체의 탄생지(새로 생성된 객체가 많은 양의 메모리를 점유하는 경우 이전 객체에 직접 할당됨)

      연대). Eden 영역에 충분한 메모리가 없으면 MinorGC가 트리거되어 새로운 생성 영역에서 작업을 수행합니다.

      가비지 수집.

    2. 서버에서

      마지막 GC의 생존자는 이번 GC의 스캔 대상이 됩니다.
    3. 봉사자에게

      MinorGC 프로세스의 생존자는 유지됩니다.
    4. 마이너GC 프로세스

      (복사->지우기->교환)

      MinorGC는 복사 알고리즘을 사용합니다.

       eden, servicorFrom이 ServicorTo로 복사됨, 연령 +1

      먼저 Eden, ServivorFrom 영역에 남아있는 객체들을 ServicorTo 영역으로 복사하고(age가 있는 객체가 있고 old age 기준에 도달하면 old 영역에 할당) 동시에 age를 추가한다. 이러한 개체를 1개로 늘립니다(ServicorTo의 공간이 충분하지 않은 경우 노인 구역에 두십시오).

      그런 다음 Eden 및 ServicorFrom에서 개체를 지웁니다.

      마지막으로 ServicorTo와 ServicorFrom이 서로 바뀌고 다음 GC에서는 원래 ServicorTo가 ServicorFrom 영역이 됩니다.

  2. 노년

         주로 애플리케이션에 수명이 긴 메모리 개체를 저장합니다. Old Generation의 객체는 상대적으로 안정적이므로 MajorGC가 자주 실행되지 않습니다. MajorGC 이전에는 일반적으로 MinorGC가 먼저 수행되므로 새로운 세대의 객체가 Old 세대로 승격되고 공간이 부족한 경우에만 트리거됩니다. 새로 생성된 더 큰 개체에 할당할 만큼 충분히 큰 연속 공간을 찾을 수 없는 경우 미리 MajorGC가 트리거되어 공간을 확보하기 위해 가비지 수집을 수행합니다.
          MajorGC는 표시 및 청소 알고리즘을 사용합니다. 먼저 모든 이전 세대를 스캔하고 남아 있는 객체를 표시한 다음 표시되지 않은 객체를 재활용합니다. MajorGC는 스캔한 후 재활용해야 하기 때문에 시간이 오래 걸립니다. MajorGC는 메모리 조각을 생성하며, 메모리 소비를 줄이기 위해 일반적으로 다음 번에 직접 할당할 수 있도록 병합하거나 표시해야 합니다. 이전 세대가 가득 차서 로드할 수 없으면 OOM(Out of Memory) 예외가 발생합니다.

  3. 영구 세대

    주로 클래스 및 메타(메타데이터) 정보를 저장하는 메모리의 영구 저장 영역을 말하며, 클래스는 로드 시 영구 영역에 배치되며, 인스턴스가 저장되는 영역과는 다르다.GC는 메인 프로그램 실행 중에는 영구적인 정보를 저장하지 않습니다. 따라서 로드된 클래스 수가 증가함에 따라 영구 생성 영역이 가득 차게 되어 결국 OOM 예외가 발생하게 됩니다.
  4. JAVA8 및 메타데이터

        Java 8에서는 영구 생성이 제거되고 "메타데이터 영역"(메타공간)이라는 영역으로 대체되었습니다. 메타공간의 본질은 영구세대와 유사하지만, 메타공간과 영구세대의 가장 큰 차이점은 메타공간이 가상머신에 있지 않고 로컬 메모리를 사용한다는 점이다. 따라서 기본적으로 메타공간의 크기는 로컬 메모리에 의해서만 제한됩니다. 클래스의 메타데이터는 네이티브 메모리에 저장되고 클래스의 문자열 풀과 정적 변수는 Java 힙에 저장됩니다. 이러한 방식으로 로드할 수 있는 메타데이터 클래스 수는 더 이상 MaxPermSize에 의해 제어되지 않고 시스템의 실제 사용 가능한 공간.

Supongo que te gusta

Origin blog.csdn.net/weixin_38340874/article/details/122081726
Recomendado
Clasificación