찾다

 >  Q&A  >  본문

java - 为什么JVM中新生代有两个Survivor区?

为什么JVM中新生代有两个Survivor区?

如题。

伊谢尔伦伊谢尔伦2840일 전884

모든 응답(4)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:00:39

    개인적으로 S0과 S1은 성능 향상을 위해 존재한다고 생각합니다.

    생존자 공간 활용도 :

    언제든지 비어 있는 생존자 공간이 하나 있습니다. 다음 복사 컬렉션 중에는 eden과 다른 생존자 공간에 있는 라이브 개체가 이 공간에 복사됩니다.
    라이브 객체는 객체가 충분히 오래되어 종신 세대에 배치될 수 있을 때까지 두 생존 공간 사이에서 앞뒤로 복사됩니다(과거 복사)

    가비지 수집 중에 죽은 개체를 정리해야 하기 때문에 생존 영역이 하나만 있는 경우 이 생존 영역의 죽은 개체는 메모리 조각화를 방지하기 위해 정리된 후 메모리 조각을 생성합니다. 이동해야 합니다. 그러면 성능이 저하됩니다.

    위의 설명에 따르면 생존 영역이 2개라면 메모리 조각화 문제는 발생하지 않습니다.

    SO의 답변은 다음과 같습니다: http://stackoverflow.com/ques...

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:00:39

    신세대는 复制收集算法을 사용하고, 두 서바이버 영역은 复制收集算法과 협력하게 된다.
    내 블로그 중 하나에서 이러한 유형의 문제를 자세히 소개했습니다. 관심이 있으시면 살펴보실 수 있습니다.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:00:39

    각 GC 후에 두 생존자는 위치를 교환합니다
    지금까지 내가 아는 유일한 것은 그것을 잃는 방법입니다

    회신하다
    0
  • 迷茫

    迷茫2017-04-18 10:00:39

    잔해물 생성을 방지하기 위해 사용되는 전설적인 버디 시스템입니다.

    회신하다
    0
  • 취소회신하다