2017-10-04 12 views
3

은 그냥 Unity's docs Unity의 가비지 컬렉터 - 왜 비 세대 및 비 압축인가? 뵘 GC 알고리즘을 사용 - - 비 세대 및 비 성형이다

그 유니티의 가비지 컬렉션에서 읽었습니다. "비 세대"는 GC가 수집 단계를 수행 할 때 전체 힙을 스윕해야하므로 힙이 확장됨에 따라 성능이 저하된다는 것을 의미합니다. "비 압축 (non-compacting)"은 객체의 틈을 메우기 위해 메모리의 객체가 재배치되지 않는다는 것을 의미합니다.

왜 세대가 압축되고 압축되는 표준 .Net GC를 사용하여 Unity가 왜 중단되는지 알고있는 사람이 있습니까? 나는 약간의 테스트를했고 LOH의 객체조차도 0 세대에 있고 아마도 GC가 작은 객체로 그것들을 모으려고하는 것에 놀랐다.

답변

9

세부 사항에주의를 기울 였으므로 여기에 나와있는 세부 사항에 대한 이야기가 나옵니다.

2008 년 초에 Unity와 Mono는 협업을 발표했으며 당시 Unity는이를 포함시키기 위해 Mono 런타임 (오픈 소스 사용을 위해 GPL 적용)을 라이센스했습니다. 그리고 Boehm GC는 Mono의 주요 GC였습니다.

기본적으로 Mono 4.x/5.x는 SGen GC를 생성/압축 기능과 함께 사용합니다. 그러나 Unity는 라이센스를 다시 지불하기를 원하지 않았습니다. 따라서 문서가 그대로 유지됩니다.

Microsoft는 2016 년에 Xamarin을 인수하여 Mono 핵심 자산을 관리했습니다. MIT에서 코드베이스를 다시 게시하여 라이센스 문제를 계속 해결했습니다. Unity는 .NET Foundation에 합류했으며 Microsoft/Xamarin과 협력하여 최신 Mono 런타임을 게임 엔진에 통합했습니다.

이러한 노력은 아직 완료 중이며 곧 성숙 될 것입니다 (현재 실험적 기능입니다).

아직, Unity는 표준 .NET GC를 아직 사용할 수 없습니다. Microsoft는 GC를 .NET Framework에서 오픈 소스로 사용하지 않고 .NET Core에서 버전을 오픈합니다. 이 GC는 Mono와는 다르며 Unity에 삽입하기 위해 더 많은 노력이 필요합니다. Mono 5가 지금 통합되도록 선택된 이유입니다. 앞으로 Unity는 .NET Core GC로 마이그레이션 할 것입니다.

이벤트 중 일부는 .NET timeline에서 찾을 수 있습니다.