이론 공부

자바 기초 내용 정리

Yuco 2023. 2. 1. 01:01

[1] JVM

1. JVM(Java Virtual Machine) 

- 자바를 실행하기 위한 가상 기계

- 자바는 OS에 종속적이지 않기 때문에 OS에 종속받지 않고 실행되기 위해서는 JVM이 필요함 (OS에 종속받지 않고 CPU가 자바를 인식하고, 실행할 수 있게 해주는 가상 컴퓨터)

- JAVA 프로그램용 운영체제로서 자바의 원시코드 .java(소스코드)는 컴퓨터가 인식하지 못하며, 이는 기계어로 컴파일 되어야 하므로  .class(바이너리 파일)로 변환

 

 

2. JVM 데이터 영역 = Runtime Data Areas

- Method Area, Heap Area, Stack Area, PC register, Native Method Stack

- 코드의 데이터 타입에 의해 구분되어 각 영역에 메모리 할당 

- PC Register, Stack Area, Native Method Stack은 각 쓰레드 별로 존재 (각 쓰레드(Thread)마다 서로 다른 메모리가 할당됨)

- Heap과 Method Area는 각각의 스레드(Thread)가 메모리를 공유

 

1) Heap 

- new 연산자로 생성된 객체 또는 인스턴스와 배열을 저장

- Heap 영역에서 생성된 객체와 배열은 스택 영역의 변수나 다른 객체의 필드에서 참조

 

2) Method Area

- 프로그램 실행 중 클래스가 사용되면 JVM은 해당 클래스 파일을 읽어서 분석하여 클래스의 인스턴스 변수, 메서드 코드 등을 저장

 

3) Stack

- 메소드 호출마다 프레임이 생성되어 쌓임

- 프레임에는 리턴 값, 지역 변수, 연산자 스택, 현재 클래스 constant pool의 값을 호출할 레퍼런스 존재

- 이러한 레퍼런스를 통해 클래스, 인스턴스 변수들이나 생성된 참조 자료형 호출 (Heap 영역의 값 호출)

 

 

[2] 데이터 타입(자료형)

1. 기본 타입과 참조 타입

1) 기본 타입

- 값 자체가 들어있는 데이터 타입

  • 정수 : byte(1byte), short(2byte), int(4byte), long(8byte)
  • 실수 : float(4byte), double(8byte)
  • 문자형 : char(2byte)
  • 논리 타입 : boolean(1byte)

 

2) 참조 타입

- 배열, 열거, 클래스, 인터페이스

- 값이 있는 주소형 데이터를 가지고 있는 데이터 타입

 

 

2. 상수와 리터럴

1) 상수

- 변하지 않는 값

- final(예약어)를 사용하여 값이 바뀌지 않도록 함 + final이 메서드 앞에 있을 경우 오버라이딩을 못하게 함

2) 리터럴

- 프로그램에서 사용하는 모든 숫자, 문자, 논리 값

 

 

3. 형 변환

1) 묵시적 형 변환 = 자동 형 변환

- 작은 데이터 타입에서 큰 데이터 타입으로 변환 (byte ▶ int) / (int ▶ float)

 

2) 명시적 형 변환

- 큰 데이터 타입에서 작은 데이터 타입으로 변환

- 강제 형 변환시킬 값이나 변수 명 앞에 바꿀 자료형을 괄호 안에 명시

- double 값 int로 변경할 경우 double a = 3.14;   int b = (int) a;   이렇게 명시해줘야 함