* 본 포스팅은 인프런 강의 "더 자바, '코드를 조작하는 다양한 방법'" 강의를 보고 정리한 것임
JVM(Java Virtual Machine)
● 자바 가상머신으로 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT컴파일러) 하여 어떻게 실행할지에 대한 표준 스펙
> 바이트 코드 : 클래스 파일 안에 들어 있는 Complied ~ } 까지가 모두 바이트 코드
● 바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 밴더가 구현한 JVM)다.
● JVM 스팩: https://docs.oracle.com/javase/specs/jvms/se11/html/
> JVM 스펙을 여러 벤더에서 스펙에만 맞춰서 마음대로 구현할수 있음
● JVM 밴더: 오라클, 아마존, Azul, ...
● 특정 플랫폼에 종속적.
> 바이트 코드를 인터프리터와 JIT컴파일러로 실행해서 OS(mac, window)에 맞는 머신코드로 변경한 후 실행 >> 특정 플랫폼에 종속적일 수 밖에 없음
BUT JVM만으로 배포되지 않음. 최소단위가 JRE
JRE (Java Runtime Environment): JVM + 라이브러리
● 자바 애플리케이션을 실행할 수 있도록 구성된 배포판.
> JRE의 목적인 자바 애플리케이션 실행! 실행하는데 필요한 것만 포함
● JVM(바이트 코드 실행해야하니까)과 '자바' 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스(JAR 등)
파일을 가지고 있다.
● 개발 관련 도구는 포함하지 않는다. (그건 JDK에서 제공)
> JRE 파일을 보면 아까 컴파일했던 javac는 들어있지 않음
JDK (Java Development Kit): JRE + 개발 툴
● JRE + 개발에 필요할 툴
● 소스 코드를 작성할 때 사용하는 자바 언어는 플랫폼에 독립적.
● 오라클은 자바 11부터는 JDK만 제공하며 JRE를 따로 제공하지 않는다.
>자바 9부터 모듈시스템(jlink)이 생김. jlink를 이용해서 jre를 만들 수 있기 때문에 아마도 제공ㄴ인듯
● Write Once Run Anywhere
자바
● 프로그래밍 언어
● JDK에 들어있는 자바 컴파일러(javac)를 사용하여 바이트코드(.class 파일)로 컴파일 할
수 있다.
● 자바 유료화? 오라클에서 만든 Oracle JDK 11 버전부터 상용으로 사용할 때 유료. (자바유무료화 관련 포스팅 https://medium.com/@javachampions/java-is-still-free-c02aef8c9e04 )
> 예를 들어 Oracle open jdk 11 = 무료, amazon open jdk 11 = 무료
최초의 JVM은 자바만을 지원하기 위해서 만들어짐
but 자바언어와 직접적 연관 X, class 파일만 있다면 실행 가능. 자바와 JVM의 의존성은 타이트하지 않음
다른 언어로 코딩을 해도 컴파일 했을 때, class 파일이나 java 파일을 만들어 준다면 JVM 활용 가능
JVM 언어
● JVM 기반으로 동작하는 프로그래밍 언어
● 클로저, 그루비, JRuby, Jython, Kotlin, Scala, ...
> 코틀린으로 작성 후, class파일 생김 > 바이트코드로 보임
But 실행은 안 됨. 후에 jar 만들어서 어쩌구저쩌구 해서 실행하면 됨
'공부 > JAVA + SPRING' 카테고리의 다른 글
JAVA 스터디 2 JVM 구조 (2) | 2023.07.02 |
---|---|
IntelliJ Spring Boot devtools setting 데브툴즈 셋팅 (0) | 2023.02.07 |