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에서 제공하는 배열과 관련된 유용한 기능을 모아 놓은 클래스이다.
댓글남기기