이것은 하나의 대답으로 적절하게 답변 할 수없는 큰 주제입니다. Windows Internals 사본을 가져 오는 것이 좋습니다.이 자료는 매우 귀중한 자료입니다. Eric Lippert에는 운영 체제에서 할당 한 메모리를 볼 수있는 방법에 대한 좋은 설명 인 최근 블로그 게시물이 있습니다.
프로세스가 사용하는 메모리는 기본적으로 실제 메모리, 페이지 파일 또는 파일에 의해 백업 될 수있는 운영 체제에 의해 예약 된 address space입니다. 이는 관리되는 응용 프로그램이든 기본 응용 프로그램이든 동일합니다. 프로세스가 종료되면 운영 체제는 할당 된 메모리를 삭제합니다. 가상 주소 공간은 단순히 삭제되고 페이지 파일이나 실제 메모리 백업은 다른 프로세스에서 사용할 수 있습니다. 이것은 운영체제가 실제로 유지 관리하는 모든 것입니다. 물리적 공간에 주소 공간을 매핑합니다. 프로세스가 더 많은 메모리를 요구하거나 유휴 상태 일 때 매핑이 바뀔 수 있습니다. 요구 사항을 충족시키기 위해 물리적 메모리 내용을 디스크로 이동하거나 그 반대의 경우도 가능합니다.
이러한 도구에 따라 사용되는 프로세스는 실제로 할당 된 전체 주소 공간, 할당 된 총 메모리 (페이지 파일 + 실제 메모리) 또는 프로세스가 실제로 사용하는 메모리가 될 수 있습니다. 기억. 작업 관리자에는 이러한 각각의 가능성에 대해 별도의 열이 있습니다.
운영 체제는 가비지 수집을 할 수 없습니다. 메모리에 실제로 들어있는 내용에 대한 통찰력이 없으므로 OS는 가비지 수집을 할 수 없습니다. 메모리의 할당 된 페이지 만 보게되며, 참조되거나 참조되지 않을 수도있는 객체를 볼 수 없습니다.
OS 핸들이 가상 주소 수준에서 할당하는 반면, 프로세스 자체에는 페이지 크기의 큰 덩어리를 가져 와서 응용 프로그램에 유용한 유용한 것으로 나누는 다른 메모리 관리자가 있습니다. Windows는 64k 경계에서 할당 된 메모리를 반환하지만 힙 관리자는 new
을 통해 프로그램에서 수행 한 각 개별 할당에 사용하기 위해 작은 덩어리로 분할합니다. .NET 응용 프로그램에서 CLR은 가비지 수집 힙에서 새 개체를 넘겨주고 그 힙이 한계에 도달하면 가비지 수집을 수행합니다.
지금까지의 답변은 훌륭합니다. 문제는 "관리되는"환경을 제공하고 가비지 수집을 완료하는 운영 체제가 있습니까? :) –
일종의, 블랙 베리와 다른 임베디드 시스템과 같은 "Java"기반의 플랫폼이 있습니다. 그러나 명확한 애플리케이션 협력없이 일반 GC를 제공하는 데스크탑 클래스 OS는 없습니다. –
관리되는 OS에 대한 Microsoft 연구 프로젝트에 대해 읽은 것을 기억합니다. 가비지 수집을 제공하는 것으로 가정하고, 참조를 찾을 수 있는지 확인할 것입니다 ... – Martin