.NET
- CLR과 클래스 라이브러리 세트를 의미함
- CLR은 C# 코드를 컴파일 한 결과물인 IL 코드를 다시 해당 플랫폼에 맞는 코드로 변환하여 하나의 소스코드로 여러 플랫폼을 지원함
- .NET에는 공용 타입 시스템이 있다
- 모든 타입은 값 타입과 참조 타입으로 분류
- 모든 타입은 System.Object 타입을 상속 받음
- 이를 명확히 인지하고, 박싱과 언박싱을 피하도록 코드를 작성해야 함
가비지 컬렉션
- 메모리를 수동으로 관리하는 것은 여러 문제점이 있음
- 메모리를 자동으로 관리하는 기술
- 가비지로 가정하는 방법
- 추적 : 도달 가능성으로 가비지 판단
- 참조 카운팅 : 참조 횟수로 가비지 판단
- 표준 .NET은 세대별 가비지 컬렉션을 사용
- 메모리 할당은 0세대에서만 일어남
- 메모리 해제 시, 가비지가 아닌 메모리는 윗세대로 승격됨
- 가비지 컬렉션이 수행되는 동안에는 프로그램이 멈추기 때문에 이에 유의하여 코드를 작성해야 함.
.NET: Unity
- Unity의 스크립트 백엔드(스크립트 환경)는 Mono, IL2CPP 두 개가 있음 => 여기서 모든 차이가 발생
- 세대별로 관리하지 않으며, 메모리 압축 또한 없기 때문에 메모리 단편화가 쉽게 일어나고, 힙도 쉽게 확장된다. 그래서 최적화 이슈가 발생할 수 있다.