일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 깃허브 리드미
- 깃허브 방문자
- 깃허브 뱃지
- 프라이탁
- 깃허브 프로필
- 알고리즘 입력받는 값
- Visual Studio Code 파이썬
- 파이썬 설치하기
- Redis
- 리드미 꾸미기
- 깃허브
- Sanner와 BufferedReader의 차이점
- 윈도우10에 파이썬 설치
- 파이썬 설치
- hashcode
- Redisson
- 동등성
- setting.xml
- 프라이탁 알림봇
- 깃허브 리드미 꾸미기
- 신규 프로젝트 생성후 빌드시 오류
- 프라이탁 파이썬
- pip업그레이드
- visual studio code
- 레디스
- 파이썬 pip
- maven 오류
- spring-boot-starter-parent
- 분산락
- GitHub profile
- Today
- Total
yeo72.devlog
[JAVA]JVM 동작원리 본문
자바언어의 장점은 어떤 환경(OS)에서도 실행 가능하다는 것입니다.
그에비해 C언어나 C++ 같은 네이티브 언어들은 각각의 운영체제에 직접 컴파일 되어 실행되기 때문에 특정 운영체제에 종속됩니다.
따라서 운영체제게 맞는 소스코드를 작성하여 컴파일 하여야 합니다.
이러한 차이점이 왜 나오는 것일까요?
그 이유는 JVM(Java Virtual Machine) 에 있습니다.
JVM은 직역하면 자바언어로 만들어진 프로그램을 실행하는 가상 머신(컴퓨터)입니다.
JAVA언어로 작성된 코드는 컴파일러(Javac.exe) 가 바이트 코드로 변환하여 주는데 이 것을 '중간 언어' 라고 합니다.
각각의 운영체제에 맞는 JRE(자바 실행 환경)을 설치 하게 되면 JVM도 자동으로 설치되는데,
컴파일러가 변환시킨 바이트 코드는 JVM이 각자의 운영체제에 맞게 컴파일 해주기 때문에 운영체제에 종속적이지 않습니다.
여기서 주의해야 할 점은 JAVA 언어는 운영체제에 독립적이지만, JVM 은 운영체제에 독립적이지 않다는 것입니다.
즉, Java 로 작성된 코드는 바이트 코드로 변환되어 어떠한 운영체제에도 영향을 미치지 않지만,
JVM은 각 운영체제에 맞게 바이트 코드를 해석하고 실행시켜야 합니다.
자바프로그램의 실행 과정을 확인해 보겠습니다.
- 컴파일 : 가장 먼저 컴파일 단계에서는 java로 작성된 소스코드를 바이트코드인 class 소스로 변환 시킵니다.
- 클래스 로딩 : 프로그램이 실행되면 JVM내부에 있는 클래스 로더가 JVM내부의 Runtime Data Area로 이동 시킵니다.
- 실행 엔진(Excution Engine) : Interpreter와 JIT compiler가 바이트 코드를 해석하고 실행시킵니다.
- 실행 : 메모리 할당 및 객체 생성과 메서드가 실행됩니다.
- 종료 : main 메서드의 실행이 완료되거나, 다른 종료조건이 충족되면 프로그램이 종료됩니다. JVM은 실행중인 프로세스를 정리하고 메모리를 해제합니다.
이러한 과정은 Java 프로그램이 실행되는 동안 반복되며, 프로그램이 종료될때 까지 지속됩니다.
참조:
https://velog.io/@livenow/Java-JVM%EC%9D%B4%EB%9E%80
https://techvidvan.com/tutorials/java-virtual-machine/
https://steady-snail.tistory.com/67
https://d2.naver.com/helloworld/1230
'Study > Java' 카테고리의 다른 글
반복문(loop) 안에서 객체 생성과 성능 비교 (0) | 2023.10.18 |
---|---|
[JAVA] 상속과 포함관계 (0) | 2023.09.12 |
[Java]Scanner 와 BufferedReader의 차이 (0) | 2023.03.15 |
[Spring Cloud] Eureka server 와 Eureka Client 설정 - application yml (0) | 2023.03.14 |
[Java] valueOf() 함수와 toString() 함수의 차이 (0) | 2022.04.19 |