메모리는 RAM으로써 순서에 상관없이 임의로 데이터들에 접근하는 장치를 의미합니다.
컴퓨터가 작업을 처리할 경우 CPU는 계산을 담당하고 HDD와 같은 보조기억장치는 정보를 담당합니다. 그런데 보조기억장치에서 바로 계산하기에는 CPU에 비해 보조기억장치가 상대적으로 너무 느리기 때문에 보다 빠른 RAM을 활용하여 정보를 처리합니다.
언어는 Managed 언어와 Unmanaged 언어로 나눌 수 있습니다. C언어와 같이 개발자가 메모리를 직접 관리하는 언어를 Managed 언어, 자바와 같이 가비지 컬렉터가 메모리를 관리하는 언어를 Unmanaged 언어라고 합니다.
메모리 관리에 따라 프로그램들이 느려지거나 무한 대기 상태에 빠지는 경우가 종종 있습니다. 그리고 변수의 종류에 따라 다른 메모리 영역에 적재됩니다. 그래서 메모리를 알고 프로그래밍을 메모리 관리를 효과적으로 할 수 있습니다.
동적 할당 영역으로 프로그램이 실행되는 도중에 일시적으로 필요할 경우 메모리를 할당하고 사용 후 반납하는 영역입니다.
힙 영역은 메모리의 주소값을 할당하고 사용 후 반납하는 영역입니다. 힙 영역은 메모리의 주소값을 할당하며 이후 필요가 없어질 경우 해제합니다. 힙 영역을 해제할 경우에는 더 이상 메모리를 사용하지 않을 경우 해제해야 메모리를 효율적으로 사용할 수 있습니다. 힙 영역은 스택에 실제 데이터가 저장되는 위치에 대한 주소값만을 저장한 후 필요할 경우 주소값을 활용해 접근하여 사용합니다.
사실 힙 영역은 스택에 비해 데이터 처리가 느립니다. 그럼에도 힙 영역을 사용하는 이유는 이러합니다.
LIFE Cycle : 스택 메모리에서는 저장한 값이 스택과 함께 사라집니다. 따라서 프로그램이 실행되는 동안 값을 저장하기 부적합하기에 힙 영역이 사용됩니다.
Large Size : 커다란 객체를 스택에 무작정 할당할 경우 한정된 스택 메모리에 다른 값을 쌓는 게 어려울 수 있기 때문에 스택에 주소만 주고 힙 메모리에 할당하여 메모리를 효율적으로 관리합니다.
Dynamic Memory : 처음부터 객체의 개수를 정하지 않고 필요할 경우마다 객체 생성을 결정할 수 있기 때문에 힙 메모리를 사용합니다.