구조로 알아보는 JVM의 동작 원리
클래스 파일 - 개발자가 만드는 혹은 이미 만들어진 파일.
클래스 로더 서브 시스템 - JVM은 실행할 클래스 파일을 읽고, JVM메모리에 올려놓는 과정이 필요. 이 과정을 클래스 로딩이라하며 JVM의 클래스 로더 서브 시스템이 담당.
실행데이터 영역 - 클래스 로더로부터 분석된 데이터를 저장하고 실행 도중 필요한 데이터를 저장하는 영역
- 메소드 영역(코드 영역) : 클래스 로더에 의해서 로딩된 클래스가 저장되는 곳, JVM에서 클래스를 실행하면 메소드 영역에서 클래스 정보를 복사
- 스택 영역 : 호출된(실행된) 메소드 정보사 저장되는 곳으로 실행이 끝나면 저장된 정보는 삭제, 메소드가 실행될 때마다 저장되는 메소드 정보에는 매개변수, 지역변수 등이 있다. LIFO(Last In First Out) 방식으로 동작
- 힙 영역 : new 명령문으로 인스턴스를 생성하면 메모리의 힙영역에 생성. 힙영역은 JVM에서 가장 중요한 데이터를 저장함과 동시에 세밀한 관리가 이뤄지는 곳, 객체는 클래스가 실행될 때 생성되어서 힙 영역에 저장
- 레지스터 영역 : JVM이 수행할 명령어의 주소를 저장하는 메모리 공간
- 네이티브 메소드(OS의 시스템 정보, 리소스를 사용하거나 접근하기 위한 코드) 스택 영역 : 자바 프로그램괴 OS사이에 JVM이 존재, 자바 프로그램은 시스템에 직접 접근하기 어려움.JNI(Java Native Interface) API를 사용하면 자바 프로그램에서 OS시스템에 대한 접근이 가능
스택영역 | 스택 | 스택 | 힙 | 힙 |
참조형 변수 | name | &100주소값 | &100 | 홍길동 |
참조형 변수 | hobby | &300 | &300 | 영화 |
기본형 변수 | price | 100 | ||
기본형변수 | age | 21 |
변수의 값이 같은지 비교
기본 타입 : 변수의 값이 같은지 다른지 조사
참조 타입 : 동일한 객체를 참조하는지 다른 객체를 참조하는지 조사 //클래스, 인터페이스
null
- 변수가 참조하는 객체가 없을 경우 초기값으로 사용 가능
- 참조 타입의 변수에만 저장가능
- null로 초기화된 참조 변수는 스택 영역 생성
배열 : 같은 타입의 데이터를 연속된 공간네 저장하는 자료구조.
배열이름 : 배열의 시작주소
인덱스 : 순번을 나타내는 위치 정보
#배열 생성
[new 데이터 타입 [요소 수]; ]
#배열 변수 선언
[데이터 타입[ ] 변수명; or 데이터 타입 변수명[ ]; ]
배열을 선언하면 사용된 배열명은 배열의 시작주소가 된다.
배열의 이름 = 주솟값
int[ ] numbers; //배열 선언 |
numbers = new int[5]; //배열 생성 |
int [ ] numbers = new int[5]; //배열 선언과 동시에 생성 |
#배열 초기화
[데이터 타입[ ] 배열명 = new 데이터타입[ ]{값1, 값2, 값3,....};]
[데이터 타입[ ] 배열명 = {값1, 값2, 값3,....};]
#배열의 길이 구하기
[배열명.length]
#if(문자열배열명[인덱스].equals(문자열변수))
배열은 1차원 배열과 다차원 배열로 구분 (2차열 배열은 행과 열 두가지 정보를 알아야 접근 가능)
#2차원 배열 선언과 생성
[new 데이터 타입[행의 수][열의 수] //2차열 배열 생성]
[데이터 타입[ ][ ] 변수명; or 데이터 타입 변수명[ ][ ]; //2차원 배열 생성]
[변수명[행 인덱스][열 인덱스]; //접근하기 위해 행 인덱스와 열 인덱스 지정]
#2차원 배열의 초기화
[int[][] array = {{1,2},{3,4}];
#2차원 배열에서 length 필드
[배열명.length //행의 길이 or 배열명[행인덱스].length //열의 길이]
배열 복사 방법
- for문 이용
- Arrays 클래스 이용
- System.arraycopy() 메소드 이용
[System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
//(원본 배열, 원본 배열 복사 시작 인덱스, 새배열, 새배열 붙여넣기 시작 인덱스, 복사 항목수)]
'Java' 카테고리의 다른 글
Java 생성자 및 클래스 변수, 클래스 메서드 (1) | 2023.05.14 |
---|---|
Java 객체 지향 프로그래밍 (0) | 2023.05.13 |
Java 제어문(조건문, 반복문, 보조제어문) (0) | 2023.05.13 |
Java 변수 및 연산자, 수식 (0) | 2023.05.13 |
Java 기초 이론 (0) | 2023.05.13 |