산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java 스택 및 힙:Java 메모리 할당 자습서

스택 메모리란 무엇입니까?

Java의 스택은 메소드, 지역 변수 및 참조 변수를 포함하는 메모리 섹션입니다. 스택 메모리는 항상 후입선출 순서로 참조됩니다. 스택에 로컬 변수가 생성됩니다.

힙 메모리란 무엇입니까?

힙은 객체를 포함하고 참조 변수도 포함할 수 있는 메모리 섹션입니다. 인스턴스 변수는 힙에 생성됩니다.

자바의 메모리 할당

자바의 메모리 할당 가상 메모리 섹션이 변수와 구조체 및 클래스의 인스턴스를 저장하기 위해 프로그램에서 따로 설정되는 프로세스입니다. 그러나 선언 시 메모리는 객체에 할당되지 않고 참조만 생성됩니다. 객체의 메모리 할당은 new() 메서드를 사용하므로 객체는 항상 힙에 메모리를 할당받습니다.

Java 메모리 할당은 다음 섹션으로 나뉩니다.

  1. 스택
  2. 코드
  3. 정적

이 메모리 분할은 효과적인 관리를 위해 필요합니다.

로컬 변수와 인스턴스 변수의 차이점

인스턴스 변수 클래스 내부에 선언되지만 메소드 내부에는 선언되지 않음

class Student{ 
int num; // num is  instance variable 
public void showData{}

로컬 변수 내부에 선언됨 메서드 메소드 인수 .

public void sum(int a){

int x = int a +  3;

// a , x are local variables;

}

스택과 힙의 차이점

동영상에 액세스할 수 없는 경우 여기를 클릭하십시오.

이를 더 잘 이해하기 위해 예를 들어보겠습니다.

메소드 m1

을 호출하는 주요 메소드를 고려하십시오.
public void m1{
int x=20
}

스택 자바에서 프레임은 m1 메소드에서 생성됩니다.

m1의 변수 X는 스택의 m1에 대한 프레임에도 생성됩니다. (아래 이미지 참조).

메소드 m1이 메소드 m2를 호출하고 있습니다. 스택 java에서 프레임 m1 위에 m2에 대한 새 프레임이 생성됩니다.

변수 b와 c도 스택의 프레임 m2에 생성됩니다.

public void m2(int b){
boolean c;
}

동일한 메소드 m2가 메소드 m3을 호출하고 있습니다. 다시 스택의 맨 위에 프레임 m3이 생성됩니다(아래 이미지 참조).

이제 m3 메서드가 int p와 int q라는 두 개의 인스턴스 변수가 있는 "Account" 클래스에 대한 개체를 생성한다고 가정해 보겠습니다.

Account {
             Int p;
             Int q;
       }

다음은 메소드 m3에 대한 코드입니다.

public void m3(){
	Account ref = new Account();
	// more code
}

new Account() 문은 힙에 account 개체를 생성합니다.

참조 변수 "ref"는 스택 java에 생성됩니다.

할당 "=" 연산자는 힙의 개체를 가리키도록 참조 변수를 만듭니다.

메서드가 실행을 완료하면. 제어 흐름은 호출 메서드로 돌아갑니다. 이 경우 방법 m2입니다.

메서드 m3의 스택이 플러시됩니다.

참조 변수는 더 이상 힙의 개체를 가리키지 않으므로 가비지 수집 대상이 됩니다.

메소드 m2가 실행을 완료하면. 스택에서 튀어나오고 모든 변수가 플러시되어 더 이상 사용할 수 없습니다.

방법 m1의 경우도 마찬가지입니다.

결국 제어의 흐름은 프로그램의 시작점으로 돌아갑니다. 일반적으로 "주요" 방법입니다.

객체에 인스턴스 변수로 참조가 있으면 어떻게 되나요?

public static void main(String args[]) {
  A parent = new A(); //more code } class A{ B child = new B(); int e; //more code } class B{ int c; int d;  //more code }

이 경우 참조 변수 "child"가 힙에 생성되며, 이는 차례로 아래 다이어그램과 같이 해당 개체를 가리킵니다.

요약:


java

  1. 자바 변수와 리터럴
  2. 자바 클래스와 객체
  3. 자바 추상 ​​클래스와 추상 메소드
  4. Java 중첩 및 내부 클래스
  5. 자바 던지기 및 던지기
  6. 자바 주석 유형
  7. 자바 오토박싱과 언박싱
  8. Java 문자열 replace(), replaceAll() 및 replaceFirst() 메서드
  9. 자바 - 재정의
  10. 자바 10 - 힙 할당