1. 리터럴(literal)
- 소스 코드 내에서 직접 입력된 값
2. JVM의 메모리 사용 영역
- JVM은 운영체제에서 할당받은 메모리 영역을 1. 메소드 영역 / 2. 힙 영역 / 3. 스레드로 구분해서 사용한다.
메모리 영역 | 설명 | 설명2 |
메소드 (Method 영역) |
코드에서 사용되는 클래스(~.class)를 클래스 로더로 읽어서 클래스 별로 1. 런타임 상수풀(runtime constant pool) 2. 필드 데이터(field) 3. 메소드 데이터(method) 4. 메소드 코드 5. 생성자(constructor) 코드 등
|
JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다. |
힙 (Heap 영역) |
배열과 객체가 생성되는 영역. JVM의 스택 영역의 변수나 다른 객체의 필드에서 "참조"한다. |
참조하는 변수나 필드가 없다면 쓰레기 값으로 가비지콜렉터가 제거한다. |
JVM 스택 (Stack 영역) |
각 스레드 마다 '하나씩' 존재 하며, 스레드가 시작될 때 할당된다. (기본은 Main 스레드기 때문에 JVM 스택도 1개)
메소드를 호출할 때 마다 프레임(Frame)을 추가(Push)하고, 메소드가 종료될 때 마다 프레임(Frame)을 제거(Pop)한다. |
프레임 내부에는 "로컬 변수 스택"이 있다. 기본 타입 변수, 참조 타입 변수가 Push or Pop 된다.
변수가 초기화 될 때 생성된다. 변수는 선언된 블록 안에서만 스택에 존재, 블록을 벗어나면 제거된다.
기본 타입 변수는 스택 영역에 직접값을, 참조 변수는 힙 영역이나 메소드 영역의 객체 주소를 가진다.
배열&객체 = 힙 영역의 주소 class = 메소드 영역의 주소 |
3. main() 메소드에 String[] args를 쓰는 이유.
- "JAVA 클래스"로 프로그램을 실행하면 JVM은 길이가 0인 String 배열을 먼저 생성하고 main() 메소드를 호출할 때 매개값으로 전달한다.
- main() 메소드에 매개값을 전달하려면 [Run -> Run Configuration...]에서 [Program arguments]에 배열들을 입력한다.
4. 참조 타입
- 배열
- 열거
- 클래스
- 인터페이스
5. 배열은 참조 타입으로 객체의 번지값이 저장되기 때문에 배열 값의 비교는 equals() 메소드를 사용해야 한다.
~업데이트 예정~
'Deperecated > JAVA' 카테고리의 다른 글
JAVA - 열거 타입 (0) | 2020.01.04 |
---|---|
JAVA - 향상된 for문 (0) | 2020.01.04 |
JAVA 기본서 공부 - 4 <연산자> (0) | 2019.12.19 |
JAVA 기본서 공부 -3 <상수> (0) | 2019.12.19 |
JAVA 기본서 공부 -2 <변수&자료형> (0) | 2019.12.19 |