프로세스 = 운영체제로부터 받는 작업의 단위
쓰레드 = 프로세스 안에서 진행되고 있는 흐름의 단위
프로그램 = 실행되기 전의 정적인 상태인 코드의 집합체
프로그램은 프로세스를 통해서 정적인 상태에서 메모리로 올라오면서 동적인 상태가 되며 프로세스 하나만으로 처리했던 과정을 좀더 세분화할 수 있도록 여러개의 쓰레드를 통해 작업을 처리하게 된다.
프로그램 => 프로세스를 통해 실행 => 쓰레드로 작업을 공유하면서 실행
Code/Data/Stack/Heap 의 구조로 되어있는 독립적인 메모리 영역
모든 프로세스는 기본적으로 1개 이상의 쓰레드를 지님
프로세스는 다른 프로세스를 간섭하지 못한다(쓰레드가 존재하는 이유)
프로세스 안에서 stack은 따로 할당 받고 code/data/heap은 공유
같은 프로세스안에서 여러 스레드는 heap 공간을 공유할 수 있으며 heap메모리는 서로 읽고 쓸 수 있음
한 스레드가 프로세스 자원을 변경하면 다른 스레드에서도 즉시 변경 결과를 볼 수 있음
Reference : https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
메모리 관리 방법중 하나로 사용하지 않는 동적 메모리 공간을 사용이 가능한 자원으로 회수하는 작업으로 메모리 누수를 막고 메모리를 재사용함으로써 나오는 버그를 방지할 수 있다.
보통 프로그램에서 메모리를 할당해주면 필연적으로 가비지가 생기게 된다. 기존에 만들어진 메모리를 새롭게 선언하거나 형태가 변화하게 되면 offset 주소(메모리가 저장되는 주소)를 잃게 되고 정리되지 않는 메모리가 나오게 된다.
이 데이터들을 사용되는 메모리와 사용되지 않는 메모리로 나누어서 그것을 인식해 다른 용도로 사용할 수 있도록 메모리 해제를 해준다.
Reference : https://blog.metafor.kr/163