메모리의 영역중 Heap 영역을 관리해 주는지 안해주는지에 따라 나뉜다.
메모리의 종류
Managed 언어
•
특정 런타임 환경 내에서, 프로그램을 생성하도록 설계된 언어
•
대부분 인터프리터나, VM(Virtual Machine)을 지원하고 프로그램의 코드가 이 위에서 동작하도록 설계되어 있다.
•
Python, JavaScript, Java, C#
장점
1.
메모리의 할당과 해제를 통한 메모리 관리없이, 언어 자체적으로 메모리를 관리
2.
런타인 환경으로부터 다양한 도움을 받을 수 있다. (메모리 관리를 자동으로 해주기 때문에 메모리 누수의 문제에서 자유롭다)
3.
코드가 런타임 환경에 의존하므로 하드웨어나 OS에 종속되지 않는다.
단점
1.
메모리를 구체적으로 관리할 수 없기 때문에 프로그래밍의 자유도가 낮으며 비정기적인 메모리 정리가 이루어진다.
Unmanaged 언어
•
VM과 같은 런타임 환경의 관리를 받지 않는 모든 언어
•
일반적인 컴파일을 수행하고, 컴파일을 통해 bytecode를 생성하고, 실행파일을 생성한다.
•
C, C++
장점
1.
메모리를 구체적으로 관리할 수 있기 때문에 프로그래밍의 자유도가 높다. (개발자의 역량 중요)
단점
1.
프로그래머가 실수할 경우 메모리 누수(Memory Leak) 가 발생할 수 있다.