최신 컴퓨터에는 크고 느리고 주 메모리 시스템 외에 여러 계층의 캐시 메모리가 있습니다. 메인 메모리 시스템에서 1 바이트를 읽거나 쓰는 데 필요한 시간 내에 가장 빠른 캐시 메모리에 수십 번 액세스 할 수 있습니다. 따라서 한 번의 위치에 천 번 액세스하는 것이 각각 한 번에 1,000 (또는 100) 독립 위치에 액세스하는 것보다 훨씬 빠릅니다. 대부분의 응용 프로그램은 스택 맨 위 근처에 소량의 메모리를 반복적으로 할당 및 할당 해제하기 때문에 스택 맨 위의 위치가 엄청나게 많이 사용되고 재사용되므로 (대부분의 응용 프로그램에서는 99 % 이상) 캐시 메모리를 사용하여 스택 액세스를 처리 할 수 있습니다.
반대로, 애플리케이션이 연속 정보를 저장하기 위해 반복적으로 힙 객체를 생성하고 포기하는 경우, 생성 된 모든 스택 객체의 모든 버전은 주 메모리에 기록되어야합니다. CPU가 시작한 캐시 페이지를 재활용하려고 할 때까지 이러한 객체의 대다수가 완전히 쓸모 없더라도 CPU는 그것을 알 방법이 없습니다. 결과적으로 CPU는 쓸모없는 정보의 느린 메모리 쓰기를 수행하는 데 많은 시간을 낭비해야합니다. 속도를위한 레시피는 아닙니다.
고려해야 할 또 다른 사항은 많은 경우 루틴이 종료 된 후에 루틴에 전달 된 오브젝트 참조가 사용되지 않는다는 것을 아는 것이 유용하다는 것입니다. 매개 변수 및 로컬 변수가 스택을 통해 전달되고 루틴 코드를 검사하여 전달 된 참조의 사본이 지속되지 않는 것으로 밝혀지면 루틴을 호출하는 코드는 외부 참조가없는 경우이를 확인할 수 있습니다. 호출 전에 객체가 존재하면 이후에는 아무것도 존재하지 않습니다. 반대로, 매개 변수가 힙 오브젝트를 통해 전달 된 경우, "루틴 리턴 후"와 같은 개념은 코드가 연속의 사본을 유지하면 루틴이 다음에 두 번 이상 "리턴"할 수 있기 때문에 다소 어려워집니다. 단일 통화.