>Java >Java베이스 >힙과 스택의 차이점은 무엇입니까

힙과 스택의 차이점은 무엇입니까

青灯夜游
青灯夜游원래의
2022-11-22 16:12:509751검색

차이점: 1. 힙 공간은 일반적으로 프로그래머에 의해 할당 및 해제되는 반면, 스택 공간은 운영 체제에 의해 자동으로 할당 및 해제됩니다. 2. 힙은 2차 캐시에 저장되며, 수명 주기는 가상 머신의 가비지 수집 알고리즘에 의해 결정되는 반면, 스택은 호출될 때 일반적으로 저장 공간에 있는 1차 캐시를 사용합니다. , 통화가 완료된 후 즉시 해제됩니다. 3. 데이터 구조가 다릅니다. 힙은 트리로 간주할 수 있지만 스택은 선입 후출 데이터 구조입니다.

힙과 스택의 차이점은 무엇입니까

이 튜토리얼의 운영 환경: windows7 시스템, java8 버전, DELL G3 컴퓨터.

힙과 스택의 개념:

 스택은 두 가지 데이터 구조입니다. 스택은 데이터 항목이 순서대로 배열된 데이터 구조이며, 데이터 항목은 한쪽 끝(스택의 상단이라고 함)에서만 삽입 및 삭제가 가능합니다. 마이크로 컨트롤러 애플리케이션에서 스택은 주요 기능이 데이터와 주소를 임시로 저장하는 특수 저장 영역이며 일반적으로 중단점과 장면을 보호하는 데 사용됩니다. 핵심 사항: 힙, 대기열 우선순위, 선입선출(FIFO—선입선출). 스택, 선입, 후출(FILO—선입/후출).

힙과 스택의 차이점:

1. 스택 공간 할당의 차이점:

1. 스택(운영 체제): 운영 체제에 의해 자동으로 할당 및 해제되며, 함수 매개 변수 값, 로컬 변수 값을 저장합니다. , 등.

 2. 힙(운영 체제): 일반적으로 프로그래머가 할당하고 해제하지 않으면 OS에 의해 재활용될 수 있습니다. 프로그램이 종료됩니다. 할당 방법은 연결 목록과 유사합니다.

2. 스택 캐싱 방법의 차이점:

 1. 스택은 일반적으로 호출 시 저장 공간에 있으며 호출이 완료되면 즉시 해제됩니다. 힙은 두 번째 수준 캐시에 저장됩니다. 캐시에서 수명 주기는 가상 머신의 가비지 수집 알고리즘에 의해 결정됩니다(객체가 고아가 되면 재활용할 수 없음). 따라서 이러한 개체를 호출하는 속도는 상대적으로 느립니다.

3. 스택 데이터 구조 차이점:

힙(데이터 구조): 힙은 다음과 같이 트리로 간주될 수 있습니다.

스택(데이터 구조): 선입, 후출 데이터 구조 .

Java의 스택 및 힙:

  스택 및 힙은 Java에서 Ram에 데이터를 저장하는 데 사용되는 장소입니다. C++와 달리 Java는 스택과 힙을 자동으로 관리하므로 프로그래머가 스택이나 힙을 직접 설정할 수 없습니다.

 함수에서 정의한 일부 기본형 변수와 객체 참조 변수는 함수의 스택 메모리에 할당됩니다. 변수가 코드 블록에 정의되면 Java는 스택의 변수에 대한 메모리 공간을 할당합니다. 변수의 범위를 초과하면 Java는 변수에 할당된 메모리 공간을 자동으로 해제하며 메모리 공간은 즉시 해제될 수 있습니다. 다른 용도로 사용하세요.

힙 메모리는 new로 생성된 객체와 배열을 저장하는 데 사용됩니다. 힙에 할당된 메모리는 Java 가상 머신의 자동 가비지 수집기에 의해 관리됩니다. 힙에 배열이나 개체가 생성된 후 스택에 있는 변수의 값이 힙 메모리에 있는 배열이나 개체의 첫 번째 주소와 동일하도록 스택에 특수 변수를 정의할 수도 있습니다. 스택은 배열이나 객체에 대한 참조 변수가 됩니다. 참조 변수는 배열이나 개체에 이름을 지정하는 것과 같습니다. 그런 다음 스택의 참조 변수를 사용하여 프로그램의 힙에 있는 배열이나 개체에 액세스할 수 있습니다.

Java의 메모리 변수 할당

:  1. 클래스 변수(정적으로 수정된 변수): 프로그램이 로드되면 시스템은 프로그램에 대한 메모리를 힙에서 열고 힙의 메모리 주소는 다음과 같습니다. 고속 액세스 편의를 위해 스택에 저장됩니다. 정적 변수의 수명은 전체 "시스템"이 종료될 때까지 지속됩니다.

 2. 인스턴스 변수: java 키워드 new를 사용하면 시스템은 힙에 반드시 연속적이지 않은 공간을 변수(예: 클래스 인스턴스)에 할당한 다음 분산된 힙 메모리 주소를 기반으로 해시하는 알고리즘입니다. 힙에서 이 변수의 "물리적 위치"를 나타내기 위해 이를 긴 숫자 문자열로 변환합니다. 인스턴스 변수의 수명 주기 – 인스턴스 변수에 대한 참조가 손실되면 GC(가비지 수집기)에 의해 재활용 가능한 "목록"에 포함되지만 힙의 메모리는 즉시 해제되지 않습니다.

  3. 지역 변수: 지역 변수는 메소드나 특정 코드 세그먼트(예: for 루프)에서 선언되며, 지역 변수가 범위를 벗어나면 메모리가 스택에 할당됩니다. 즉시 출시됩니다.

이것은 Java 메모리 문제와 관련되어 있습니다. 다음을 참조하세요.

Java의 메모리 메커니즘

권장 튜토리얼: "

java 튜토리얼

"

위 내용은 힙과 스택의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.