2020년 10월 14일

업데이트:


JVM의 메모리 구조

Static

Static 예약어로 선정된 필드, 메소드가 저장되는 공간, 클래스 변수 등이 저장이 된다.
Static 영역에 존재하는 데이터는 프로그램의 시작부터 종료가 될 때까지 메모리에 남아있고, 모든 영역에서 공유할 수 있어 공유해야할만한 데이터들을 모아놓는 곳이다. 참고로 Class 영역이라고도 불리며 Method 영역이라고도 불린다.

Heap

new연산자에 의해 동적으로 할당하고 저장되는 공간이며 객체, 배열 등이 저장된다. 자바에서 가장 큰 영역을 차지하므로 가장 중요한 영역이다.

Stack

메소드를 호출하면 자동 생성이되며 메소드가 끝나면 자동으로 소멸된다. 지역변수, 매개변수, 메소드 호출 스택 등


배열

배열 : 같은 자료형의 변수를 하나로 묶어 놓은 것. 배열은 저장된 값마다 인덱스(Index)가 부여되며, 인덱스 번호는 0부터 시작이다.

// 배열 선언 방법
int[] arr;
int arr[];

// 배열 할당 방법
int[] arr = new int[크기];
int arr[] = new int[크기];


참고로 배열 선언은 배열의 자료형과 이름을 지정하는 것일 뿐, 실제 데이터를 저장할 공간을 만드는 것은 아니다. 실제 데이터를 만드려면 new 연산자를 사용해야한다. new 연산자는 Heap 영역에 새로운 객체를 생성(할당)해준다.

int[] arr = new int[3];


배열은 사진과 같이 int 자료형들이 모인 하나의 객체로 기본 자료형이 아닌 참조형이므로 arr 배열에는 Heap 영역에 있는 주소 값이 저장된다.

int[] arr = new int[3];

// 배열 초기화
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

// for문을 이용한 초기화
for(int i = 0; i < arr.length; i++){
    arr[i] = i + 1;
}
// arr.length : 배열의 길이(크기)를 반환하며 인덱스의 마지막 숫자(2)를 반환하는 것이 아니라 인덱스의 개수(3)를 반환한다.

// {}를 이용한 초기화
int[] arr = {1, 2, 3};


// 배열의 인덱스 범위를 넘어 섰을 경우
arr[3] = 1; 
// ArrayIndexOutOfBoundsException 에러 발생

// 배열 출력하기
// for문 사용
for(int i = 0; i < arr.length; i++) {
    System.out.print(arr[i] + " ");
}

// Arrays.toString 사용
System.out.println(Arrays.toString(arr));
// [1, 2, 3] 이 출력된다.

Arrays 클래스는 Java에서 제공하는 배열과 관련된 유용한 기능을 모아 놓은 클래스이다.

태그:

카테고리:

업데이트:

댓글남기기