2010-01-18 3 views
4

Stack Based Memory Allocation을 참조하면 ""이라고 표시되어 있습니다 ... 각 스레드는 스택이라고하는 예약 된 메모리 영역을 가지고 있습니다. 함수가 실행되면 함수의 상태 데이터 중 일부가 스택 위에 상기 기능 "스택 기반 메모리 할당

나오면 함수가 종료 때" 및 "스택에서 데이터를 제거하기위한 책임 ... 스택 해당 메모리가 매우 효율적으로 자동적으로, 그리고, 회수 첫 번째 인용문은 현재 스레드가 책임이 있고 두 번째 인용문은 자동으로 수행된다고 말합니다.

질문 1 : 자동 또는 현재 실행중인 스레드가 수행합니까?

질문 2 : 스택에서 메모리 할당 해제가 어떻게 발생합니까?

답변

2

질문 1 : 자동 (및 매우 효율적)에 의해 그들이 단지 주변 메모리 포인터를 이동하여 (스택 상단을 차단) 것을 의미하는 모든 메모리가 회수되어 사용된다. 복잡한 가비지 콜렉션이 필요하지 않습니다.

질문 2 : 스택은 시작과 끝 포인터로 구분 된 연속 된 메모리 덩어리입니다. 포인터 사이의 모든 것은 스택에 속하며, 끝 포인터를 초과하는 모든 것은 여유 메모리로 간주됩니다. 끝 포인터 (스택의 맨 위)를 움직여 메모리를 할당하고 할당을 해제합니다. 메모리 사용이 조각난 힙에서는 상황이 훨씬 더 복잡합니다.

0

질문 1 : 예.

질문 2 : 스택 포인터를 감소시킴으로써, 즉 할당의 역 동작.

+0

예 (현재 실행중인 스레드의 경우)? –

+0

@Sri : 각 스레드는 자체 스택을 가지고 있습니다. –

+0

분명히 스레드가 실행되고 있지 않으면 메모리를 할당하거나 할당을 취소하지 못합니다. – MSalters

-1

ans 질문 1 : 가비지 수집기가 자동으로 수행하는 데몬 프로세스이므로 항상 jvm을 실행합니다. 모든 참조를 확인하고 참조가 없으면 (또는 도달 범위를 벗어난 경우) 힙에서이를 제거합니다.

ans 2 질문 : 지역 변수와 메소드 호출이 범위를 벗어나 자마자 스택에 저장되므로 스택에서 제거됩니다.

+1

스택 할당 해제 및 할당에는 가비지 수집기가 필요하지 않습니다. 컴파일러는 JVM이 돌아 오기 전에 수십 년 동안 잘 해왔다.) –

+0

스택 할당 해제를 알고 할당 할 때 가비지 컬렉터가 필요 없다. – GuruKulki

0

스택은 컴파일러에서 관리합니다.

힙은 라이브러리에 의해 관리됩니다.

+0

힙은 라이브러리에 의해 관리됩니까? (어떤) 프로그래밍 언어의 빌트인 라이브러리? "예"라고 대답 한 경우, 알려진 언어의 라이브러리 이름을 지정하십시오. –

1

예를 들어 Call Stack (예 : 많은 컴퓨터에서 C)을 보면 더 많은 것을 이해할 수 있습니다.