파이널프로젝트-주간블로깅 5회

Moon·2024년 9월 22일

Mini, Final

목록 보기
8/8

지역변수는 stack. 인스턴스 변수는 Heap에 저장.

Method area

  • Field Info : 멤버 변수의 이름, 데이터 타입, 접근 제어자의 정보
  • Method Info : 메소드 이름, return 타입, 함수 매개변수, 접근 제어자의 정보
  • Type Info : Class 인지 Interface 인지 여부 저장, Type의 속성, 이름 Super Class의 이름

간단히 말하자면 메서드 영역에는 정적 필드와 클래스 구조만을 갖고 있다고 할수있다.

Heap

  • new 연산자로 생성되는 클래스와 인스턴스 변수, 배열, 문자열 상수(String name = "mike") 타입 등 Reference Type이 저장
  • 모든 스레드가 공유하는 영역

Stack

  • int, long, boolean 등 기본 자료형을 생성할 때 저장하는 공간으로, 임시적으로 사용되는 변수나 정보들이 저장되는 영역이다.
  • 선입후출, 메서드 정보, 지역변수, 매개변수 저장.

자료구조 Stack은 마지막에 들어온 값이 먼저 나가는 LIFO  구조로 push와 pop 기능 사용방식으로 동작한다.

메서드 호출 시마다 각각의 스택 프레임(그 메서드만을 위한 공간)이 생성되고 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장한다.
그리고 메서드 수행이 끝나면 프레임별로 삭제된다.

스택 프레임(stack frame): 메소드가 호출될 때마다 프레임이 만들어지며, 현재 실행중인 메소드 상태 정보를 저장하는 곳이다. 메서드 호출 범위가 종료되면 스택에서 제거된다. 스택 프레임에 쌓이는 데이터는 메서드의 매개변수, 지역변수, 리턴값, 연산시 결과값 등이 있다.

단, 데이터의 타입에 따라 스택(stack) 과 힙(haeap)에 저장되는 방식이 다르다는 점은 유의해야 한다.

기본(원시)타입 변수는 스택 영역에 직접 값을 가진다.
참조타입 변수는 힙 영역이나 메소드 영역의 객체 주소를 가진다.

예를들어 Person p = new Person(); 와 같이 클래스를 생성할 경우, new 에 의해 생성된 클래스는 Heap Area 에 저장되고, Stack Area 에는 생성된 클래스의 참조인 p 만 저장된다.

  • {}나 메서드가 끝날 때
  • 각 스레드마다 생성되는 개별 영역

https://inpa.tistory.com/entry/JAVA-%E2%98%95-JVM-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-%EC%8B%AC%ED%99%94%ED%8E%B8

0개의 댓글