프레그먼트를 10개 추가하고 ViewPager2의 로그를 확인해 봤습니다. 페이지 0 부터 9까지 이동했다가, 거꾸로 페이지 9에서 0으로 이동할 때의 로그입니다.
ScreenSlidePageFragment.onCreate: CurrentPage: 0: null
ScreenSlidePageFragment.onCreate: CurrentPage: 1: null
ScreenSlidePageFragment.onCreate: CurrentPage: 2: null
ScreenSlidePageFragment.onCreate: CurrentPage: 3: null
ScreenSlidePageFragment.onDestroy: CurrentPage: 9
ScreenSlidePageFragment.onCreate: CurrentPage: 5: Bundle[{androidx.lifecycle.BundlableSavedStateRegistry.key=Bundle[{}], android:view_state={2131231074=android.view.AbsSavedState$1@f216706}}]
ScreenSlidePageFragment.onDestroy: CurrentPage: 8
ScreenSlidePageFragment.onCreate: CurrentPage: 4: Bundle[{androidx.lifecycle.BundlableSavedStateRegistry.key=Bundle[{}], android:view_state={2131231074=android.view.AbsSavedState$1@f216706}}]
ScreenSlidePageFragment.onDestroy: CurrentPage: 7
ScreenSlidePageFragment.onCreate: CurrentPage: 3: Bundle[{androidx.lifecycle.BundlableSavedStateRegistry.key=Bundle[{}], android:view_state={2131231074=android.view.AbsSavedState$1@f216706}}]
ScreenSlidePageFragment.onDestroy: CurrentPage: 6
ScreenSlidePageFragment.onCreate: CurrentPage: 2: Bundle[{androidx.lifecycle.BundlableSavedStateRegistry.key=Bundle[{}], android:view_state={2131231074=android.view.AbsSavedState$1@f216706}}]
ScreenSlidePageFragment.onDestroy: CurrentPage: 5
ScreenSlidePageFragment.onCreate: CurrentPage: 1: Bundle[{androidx.lifecycle.BundlableSavedStateRegistry.key=Bundle[{}], android:view_state={2131231074=android.view.AbsSavedState$1@f216706}}]
ScreenSlidePageFragment.onDestroy: CurrentPage: 4
ScreenSlidePageFragment.onCreate: CurrentPage: 0: Bundle[{androidx.lifecycle.BundlableSavedStateRegistry.key=Bundle[{}], android:view_state={2131231074=android.view.AbsSavedState$1@f216706
처음에 네번째 페이지까지는 destory하는 프레그먼트는 없고 페이지 이동시마다 새로 생성합니다.
다섯번째 페이지로 이동하면, 첫번째 페이지에 프레그먼트를 종료합니다. 여기서부터 마지막페이지까지는 동일하게
currentPage-3 에 있는 프레그먼트를 destory합니다.
그런데 다시 페이지 9에서 거꾸로 이동할 때의 로그를 보시면 Bundle이 추가된 것을 보실 수 있습니다. 이건 onCreate에 있는 savedInstanceState의 값입니다. 즉 프레그먼트는 destory되지만 뷰상태의 복구를 위해서 뷰페이저가 뷰정보만 보관했다가 프레그먼트를 새로 생성하면서 savedInstanceState로 전달해서 복구할 수있도록 해주고 있습니다.
아마 님의 경우도 찍어보면 똑같은 걸 발견하실 수 있을겁니다. 이 부분은 메모리를 차지한다고 보기 보다는 뷰의 상태를 복구한다는 부분에 초점을 맞추는 것이 더 적합하다고 봅니다.
그리고 ViewPager2는 내부적으로는 RecyclerView의 같은 방식으로 뷰를 재사용하도록 설계되었습니다. 아직 더 들여다 보지는않았는데, RecycledPool와 Cache가 존재할 거라고 생각합니다. 이것들을 통해서 얼마나 많은 페이지를 캐슁하거나 풀어 넣을지 결정할 겁니다. RecyclerView처럼 캐쉬를 조작할 수 있도록 허용하는지는 아직 찾아보지 않아서 확실하지 않네요.