자VA 동작 방식

keyCat·2024년 11월 14일

자바

목록 보기
1/5

해당 게시물은 개인 공부 기록용입니다. 아래 링크들을 보시는게 더 좋습니다!

참고문서
1. 자바 파일과 클래스 파일의 관계: https://droptable.tistory.com/42
2. [조금 더 깊은 java] Java Bytecode를 알아보자 : https://wonit.tistory.com/589
3. JVM 구조와 JAVA의 동작 원리: https://velog.io/@sgwon1996/JAVA%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC%EC%99%80-JVM-%EA%B5%AC%EC%A1%B0
4. 인터프리터 vs 컴파일러: https://modulabs.co.kr/blog/interpreter-and-compiler/

JAVA의 동작 방식 이해 JVM을 곁들인.


출처[https://docs.oracle.com/javase/8/docs/]

JDK

  • 자바 개발하기 위해 필요한 도구를 제공한다, Java 프로그램을 만들기 위해 필요한 도구
  • javac : 자바 컴파일러, 자바 언어를 바이트 코드로 컴파일 해준다.
  • javap : 어셈블리어, 자바 클래스 파일을 해석해준다.

JRE

  • Java 애플리케이션을 실행하기 위한 최소한의 환경을 제공하는 역할 - -- JVM, 자바 표준 라이브러리등 자바 어플리케이션 실행에 필요한 파일들을 포함한다.

JVM

  • 자바 가상 머신, 실제 컴퓨터에서 JAVA 어플리케이션 실행을 위한 메모리를 할당받는다(Runtime Data Area), JVM은 인터프리터와 JIT 컴파일러를 통해 바이트 코드를 운영체제에 맞는 기계어로 해석 시켜 실행 킨다. 또한 가비지 컬렉션을 통해 어플리케이션의 동적 메모리를 관리한다.

depth1+

.class 파일이란?
.class 파일은 .java파일을 컴파일해서 생성된다.
.class 파일은 컴파일러에 의해 생성된 java bytecode로 구성된 파일이다.
자바 클래스 파일의 큰 특징은 JVM을 위한 코드를 생성한다는 것이다.
즉 특정 컴퓨터를 위한 코드를 바로 생성하지않고 JVM을 위한 bytecode를 생성한다.

.java -> 컴파일러가 컴파일(JVM이 이해할 수 있도록 Bytecode로 변환) -> .class 파일 -> JVM이 기계어로 해석(운영체제에 맞게)

depth2+

인터프리터 언어와 컴파일러 언어
인터프리터 언어는 프로그램을 한 줄씩 읽어 들이면서 즉시 실행하는 방식이다.
인터프리터는 소스 코드를 직접 해석하고 실행해서 컴파일 과정이 필요하지않다.
대표언어로 python, JS등이 있다.
단점은 실행속도가 상대적으로 느리다.

컴파일러 언어는 소스 코드를 기계어로 번역하는 컴파일 과정이다.
소스 코드 전체를 분석하고 최적화 한뒤 실행파일을 생성한다.
대표적으로 C,C++,Java등이 있다.

JIT 컴파일
인터프리터 언어의 실행 속도를 개선하기 위한 기술
프로그램 실행 중에 자주 사용되는 코드를 기계어로 컴파일하여 성능을 개선한다.

빠른 개발과 유연성이 중요하다면 인터프리터 언어를 실행 속도와 안정성이 중요하다면 컴파일러 언어를 선택하자

depth3+

Java Bytecode

  • .class 파일에 존재하는 데이터
  • 우리가 개발한 자바 프로그램(코드)를 배포하는 가장 작은 단위
  • c나 c++이 컴파일하면 생성하는 기계어와 동일하지 않다.

기계어? 바이트코드?
기계어는 CPU가 직접 실행할 수 있는 코드로 CPU와 운영체제에 종속적
바이트코드는 기계어 이전 단계의 중간 코드(자바, 파이썬등에서 컴파일된 코드)

javac는 "java 소스 코드를 바이트 코드로 컴파일", JVM은 이 "바이트 코드를 인터프리터와 JIT 컴파일러를 사용해 운영체제에 맞는 기계어로 변환하고 실행"

JAVA 컴파일러? JIT 컴파일? -> JAVA 컴파일러 JAVAC를 통해 "바이트코드로", JVM에서 기계어로 번역

profile
취준생 개발로그 /ᐠ •ヮ• マ Ⳋ

0개의 댓글