> Java > java지도 시간 > 15. 자바 기초 - 힙과 스택

15. 자바 기초 - 힙과 스택

黄舟
풀어 주다: 2017-02-27 10:55:59
원래의
1285명이 탐색했습니다.

기본 개념

Java에는 데이터를 저장할 수 있는 위치가 6곳이 있습니다.


1. 레지스터

는 프로세서 내부에 위치하기 때문에 접근 속도가 매우 빠르고 프로그램이 가장 빠른 저장 영역이다. 통제할 수 없습니다.


2. Stack

은 범용 RAM에 위치한 스택입니다. 저장 속도는 등록에 이어 두 번째입니다. 바늘.

다음과 같은 특징을 가지고 있습니다.

  • 스택포인터를 통해 메모리를 제어합니다. 아래로 이동하면 새 메모리가 할당되고, 위로 이동하면 해당 메모리가 해제됩니다. 따라서 프로그램을 생성할 때 Java 컴파일러는 스택 포인터를 위아래로 이동하기 위한 적절한 코드를 생성해야 하기 때문에 스택에 저장된 모든 데이터의 정확한 크기와 수명을 알아야 합니다.

  • 스택 메모리는 단일 스레드에 속합니다. 각 스레드는 스택 메모리를 가지며, 이 스레드가 저장하는 변수는 해당 스레드가 속한 스레드에서만 볼 수 있습니다. 즉, 스택 메모리는 스레드의 전용 메모리로 이해될 수 있습니다.

  • 스택 내 데이터 공유.

  • 은 기본 유형의 변수 데이터, 객체 또는 배열에 대한 참조를 저장합니다. 하지만 객체 자체는 스택에 저장되지 않고 힙(new로 생성된 객체)이나 상수 풀(문자열 상수 객체는 상수 풀에 저장됨)에 저장됩니다.

  • FILO 선입후출 규칙이 있습니다.


3. 힙

은 힙입니다(RAM에도 있음). 모든 Java 객체를 저장하는 데 사용됩니다. 평신도의 관점에서 말하면 모든 새로운 객체를 저장하는 것입니다.

힙과 스택의 차이점은 저장소 할당에 있어 유연성이 뛰어나지만 시간이 더 오래 걸린다는 것입니다. 이유:

  • 컴파일러는 힙에서 할당할 저장 영역의 양을 알 필요가 없습니다.

  • 또한 컴파일러는 저장된 데이터가 힙에 얼마나 오래 존재하는지 알 필요가 없습니다.

객체를 생성해야 할 때 간단한 코드 한 줄만 작성하면 이 코드 줄이 실행되면 저장소가 자동으로 힙에 할당됩니다.


4. 메소드 영역

은 로드된 클래스 정보, 상수, 정적 변수, Just-In-Time 컴파일러로 컴파일된 코드를 저장하는 데 사용됩니다.


5. 상수 풀

상수 풀은 메소드 영역의 일부입니다.

String str="www"와 같은 문자열 상수 및 기본 유형 변수를 저장합니다. 실제로 "www"는 상수 풀에 있습니다.

Java의 8가지 기본 유형(Byte, Short, Integer, Long, Character, Boolean, Float, Double)은 Float 및 Double을 제외한 나머지 6가지 유형은 모두 상수 풀을 구현하지만 (- 128

기본 개념

Java에는 데이터를 저장할 수 있는 위치가 6개 있습니다.


1. 레지스터

는 프로세서 내부에 위치하기 때문에 접근 속도가 매우 빠르고 프로그램이 가장 빠른 저장 영역이다. 통제할 수 없습니다.


2. Stack

은 범용 RAM에 위치한 스택입니다. 저장 속도는 등록에 이어 두 번째입니다. 바늘.

다음과 같은 특징을 가지고 있습니다.

  • 스택포인터를 통해 메모리를 제어합니다. 아래로 이동하면 새 메모리가 할당되고, 위로 이동하면 해당 메모리가 해제됩니다. 따라서 프로그램을 생성할 때 Java 컴파일러는 스택 포인터를 위아래로 이동하기 위한 적절한 코드를 생성해야 하기 때문에 스택에 저장된 모든 데이터의 정확한 크기와 수명을 알아야 합니다.

  • 스택 메모리는 단일 스레드에 속합니다. 각 스레드는 스택 메모리를 가지며, 이 스레드가 저장하는 변수는 해당 스레드가 속한 스레드에서만 볼 수 있습니다. 즉, 스택 메모리는 스레드의 전용 메모리로 이해될 수 있습니다.

  • 스택 내 데이터 공유.

  • 은 기본 유형의 변수 데이터, 객체 또는 배열에 대한 참조를 저장합니다. 하지만 객체 자체는 스택에 저장되지 않고 힙(new로 생성된 객체)이나 상수 풀(문자열 상수 객체는 상수 풀에 저장됨)에 저장됩니다.

  • FILO 선입후출 규칙이 있습니다.


3. 힙

은 힙입니다(RAM에도 있음). 모든 Java 객체를 저장하는 데 사용됩니다. 평신도의 관점에서 말하면 모든 새로운 객체를 저장하는 것입니다.

힙과 스택의 차이점은 저장소 할당에 있어 유연성이 뛰어나지만 시간이 더 오래 걸린다는 점입니다. 이유:

  • 컴파일러는 힙에서 할당할 저장 영역의 양을 알 필요가 없습니다.

  • 또한 컴파일러는 저장된 데이터가 힙에 얼마나 오래 존재하는지 알 필요가 없습니다.

객체를 생성해야 할 때 간단한 코드 한 줄만 작성하면 이 코드 줄이 실행되면 저장소가 자동으로 힙에 할당됩니다.


4. 메소드 영역

은 로드된 클래스 정보, 상수, 정적 변수, Just-In-Time 컴파일러로 컴파일된 코드를 저장하는 데 사용됩니다.


5. 상수 풀

상수 풀은 메소드 영역의 일부입니다.

String str="www"와 같은 문자열 상수 및 기본 유형 변수를 저장합니다. 실제로 "www"는 상수 풀에 있습니다.

Java의 8가지 기본 유형(Byte, Short, Integer, Long, Character, Boolean, Float, Double)은 Float 및 Double을 제외한 나머지 6가지 유형은 모두 상수 풀을 구현하지만 (- 128

위 내용은 15.Java Basics - Heap & Stack 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿