velog에서 정리 한 것들을 블로그 이전하는 김에 다시 재정리를 하려고 한다.
2023년 2월 13일 - https://velog.io/@yujin-17/TIL-07.-Java
Java
* 객체지향 언어
객체지향 언어의 중심에는 Class가 존재한다.
단 하나의 소스파일로 모든 기종의 컴퓨터에서 실행 가능하다.
JDK vs JRE
JDK(Java Development Kit) - 자바 개발 도구
java 애플리케이션 개발을 위해 반드시 필요하다.
사람이 작성한 소스 코드를 번역하여 컴퓨터가 이해할 수 있는 바이트 코드로의 변환을 하는 컴파일러가 포함되어 있다.
Open JDK + 제조사의 부가기능으로 구성되어 있다.
JDK에는 JRE 가 포함되어 있다.
JRE(Java Runtime Enviroment) - 자바 실행 환경
java로 컴파일된 애플리케이션을 실행하는 역할을 한다.
모든 애플리케이션은 JVM(Java Virtual Machine - 자바 가상 기계)라는 가상의 컴퓨터 공간에서 실행된다.
main 함수
java로 작성된 프로그램을 실행하는 첫 관문이다.
Java의 호환성?
java는 Write Once Use Anywhere의 목적을 가진다. 소스파일을 하나만 작성하면 어디에서든지 사용이 가능하다.
반면, C언어와 같은 경우, 하나의 소스파일로 각 기계에 맞는 목적 파일로 만들어 사용한다.
하나의 목적파일로 어디든 실행 가능한 Java VS 다수의 목적파일을 만들어 사용하는 C
Java를 사용하면 이러한 이점을 이용해 기계의 기종.
즉, 운영체제의 영향을 받지 않고 개발할 수 있다.
Java의 목적파일은 반기계어인 byteCode(. class)인데, JVM에서 사용된다.
이와 같이 JVM에서 사용할 수 있게, 컴파일러(javac)가 소스코드를 바이트코드로 컴파일해주는 과정을 거친다.
Java의 실행과정?
- 개발자가 Java source file(. java)를 작성한다.
- JDK가 제공하고 있는 Java Compiler를 통해 소스파일을 컴파일한다.
- JVM의 Class Loader에서 컴파일로 생성된 바이트 코드(. class)를 전달받아, 동적 로딩을 통하여 실행에 필요한 클래스들을 로딩해 JVM의 내부 Runtime Data Area에 로드한다.
- JVM의 Execution에 의하여 기계어로 해석되어 실행된다.
Class Loader?
- 프로그램상의 작성한 모든 클래스, 변수 및 메서드 정보를 Method Area에 배치시킨다.
- JVM 내부에 바이트코드를 load, Link를 통하여 배치 작업을 수행하는 모듈이다.
- 실행 시, 동적으로 클래스를 로드하며, jar 파일 내부에 저장되어 있는 클래스들을 JVM에 로드한다.
- static(정적) 변수와 메서드는 Heap Area에 배치시킨다.
Execution (실행 엔진)
- Interpreter - 바이트 코드를 한 줄씩 읽고 번역해 준다. 느리다는 단점이 있다.
- Interpreter를 보안하기 위하여 JIT 컴파일러가 출시되었다.
JIT 컴파일러?
Interpreter 방식으로 실행을 하다, 적당한 시점에 바이트 코드 전체를 컴파일하여 캐싱한다.
컴파일된 코드를 미리 저장해 두어 바로 실행되게끔 해 실행속도가 빨라진다.
- Garbage Collector - 유효하지 않은. 즉, 사용되지 않는 메모리를 추적하여 비워주는 기능을 한다.
'Java' 카테고리의 다른 글
Java | 반목문 while, do-while, 이름붙은 반복문 (0) | 2024.01.12 |
---|---|
Java | 반복문 (0) | 2024.01.12 |
Java | 조건문 (0) | 2024.01.12 |
Java | 변수, 상수, Literal (0) | 2024.01.12 |
JVM(Java Virtual Machine) / Heap / Stack (2) | 2024.01.12 |