(기술 면접) Java 메모리 공간

1. 정적 영역

– 메소드 영역에 정적 영역 존재: 메모리 우선 할당

1) 정적 영역

정적 영역이 비정적 영역을 참조하는 것은 불가능합니다.
이것은 이것이 생성되는 첫 번째 영역이기 때문입니다.
따라서 static이 실행될 때 static이 미리 생성되지 않습니다.

2) 비정적 영역

– 정적 영역의 데이터 참조 가능

– int a = 3과 같은 기본 변수는 스택 영역으로 이동
– 학생 b = 새 학생(); 에서와 같이 객체가 생성되면 b를 참조할 수 있는 주소가 스택에 푸시되고 실제 값은 힙 공간에 존재 + 배열, 목록, 클래스 및 문자열과 같은 값은 힙 공간에 보관됨

2. 변수 범위

1) 지역변수(지역변수)

– 함수 내에서 선언, 함수 내에서만 사용
– 저장소: 스택에 저장
– 함수 호출 시 생성되고 함수 종료 시 소멸

2) 멤버 변수(인스턴스 변수)

– 클래스 내부, 함수 외부에 선언
– 클래스 멤버 변수로 선언되어 클래스 내부에서 사용되며 private이 아닌 경우 다른 클래스에서 참조 변수(인스턴스, 객체(new))로 사용 가능
– 메모리 : 힙 영역에 저장
인스턴스가 생성될 때 힙에 생성되고 GC가 메모리를 회수할 때 소멸됩니다.

3) 정적 변수(클래스 변수)

– 정적 예약어로 클래스 내부에 선언하고 private이 아닌 클래스 내부에서 사용할 경우 클래스 이름으로 다른 클래스에서 사용할 수 있음
– 저장공간 : 데이터 영역
– 프로그램이 처음 시작될 때 데이터 영역에 상수와 함께 생성되고 프로그램이 종료되면 소멸되어 메모리가 해제됩니다.

3.배열

– 데이터 타입의 집합이 아니라 데이터 타입의 집합을 의미
– 고정된 길이의 연속적인 공간
– 배열에는 순서가 있습니다(인덱스, 0부터 시작).
– 동일한 유형(데이터 유형)의 여러 변수를 하나의 대표변수 클래스로 묶음: 유형이 다른 여러 변수를 하나의 대표변수로 묶음

* 설명

data type() 변수 이름 = 새 데이터 유형(배열 길이); // 힙에 10개의 방을 만듭니다.
ex. int() arr1 = 새로운 int(10); = int arr2() = new int(10);

4. 목차

– 배열에는 동일한 유형의 값을 저장할 수 있는 공간이 있으며 각 공간에는 숫자(0부터 시작)가 있습니다.

– 배열 이름에 ()를 사용하는 것은 인덱스 연산자이며 인덱스의 기능은 배열 요소가 저장된 위치를 찾는 것 = arr1(0)

5. 다차원 배열

– 논리적 메모리 구조가 2차원 이상인 배열
– ()의 숫자는 차원의 수를 의미합니다.

– 평면 또는 공간 개념을 구현하는 데 사용

* 설명

datatype()() arrayname = 새 데이터 유형(행 수)(열 수)
int )() arr = new int(2),(3);
+ 재설정
int()() arr = {{1, 2, 3}, {4, 5, 6}};