The Java Manipulation(1)
1.JAVA, JVM, JDK, JRE
- 이번 섹션의 목표
- JAVA, JVM, JDK, JRE 이해하기
1. JVA, JVM, JDK, JRE 이란 ?
JAVA
- 프로그래밍 언어 ( 아래의 코드와 같이 말 그대로 코드 )
public class App{
public static void main(String[] args){
System.out.println("Hello world");
}
}
cf. JDK, JRE, JVM 등 포괄적인 의미로의 자바로 쓰이기도 한다 그래서 문맥에 따라 ‘자바’라는 말을 잘 이해해야한다.
- JDK에 들어있는 자바 컴파일러(javac)를 사용하여 바이트코드(.class 파일)로 컴파일 할 수 있다
1.코드 생성
2.javac를 이용해서 컴파일
3.java파일 같은 경로에 .class 라는 파일 생성
4.바이트코드로 확인하는 방법 : javap -c 파일명.class
- 자바 유효화? 라는 말의 의미
- 오라클에서 만든 Oracle JDK 11버전부터 상용으로 사용할 때 유료라는 뜻, 즉 오라클에서 만든 것만!
JVM(Java Virtual Machine)
- 자바 가상 머신으로 자바 바이트 코드(.class 파일)을 OS(ios, window, linux)에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다.
- 바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 밴더가 구현한 JVM)다.
- JVM 스팩 : https://docs.oracle.com/javase/specs/jvms/se11/html/
- 스팩 사이트를 들어가 여러가지 읽어 봤는데 재밋는 것들이 많았다. 대중교통 이용하면서 읽기 딱 좋은거 같다.
- JVM 밴더 : Oracle, Amazon, Azul , IBM, Red Hat 등등
JRE(Java Runtime Environment) : JVM + Library
- 자바 애플리케이션을 실행 할 수 있도록 구성된 배포판.
- JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다.
- 개발 관련 도구는 포함하지 않는다.( JDK에서 제공한다.)
JDK(Java Development Kit) : JRE + Development tools
- JRE + 개발에 필요한 툴
- 소스 코드를 작성할 때 사용하는 자바 언어는 플랫폼에 독립적이다.
- 오라클은 자바 11부터는 JDK만 제공하고 JRE는 따로 제공하지 않는다.
- Write Once, Run Everywhere(WORE) : 썬 마이크로시스템즈에 의해 만들어진 자바의 크로스/플랫폼에 의한 이익을 표현하기 위한 표어이다. 이것은 자바가 어떤 장비에서도 개발될 수 있고, 표준 바이트코드로 컴파일되고, 자바 가상 머신이 장착된 어떤 장비에서도 실행될 수 있음을 의미한다. 자바 가상 머신 또는 칩, 장비 또는 소프트웨어 패키지에서의 자바 인터프리터의 설치는 산업 표준안이 되었다. (참조 : Wikipedia 백과사전)
JVM언어
- JVM 기반으로 동작하는 프로그래밍 언어
- 클로저, 그루비, JRuby, Jython, Kotlin, Scala, ….
예시)
1.Kotlin 파일 생성(.kt)
2.컴파일을한다. kotlinc 파일명.kt
3.파일명kt.class가 생성 된다.
4.바이트코드로 열어본다. javap -c 파일명kt
JVM으로 kotlin언어도 가능하다는 것이다.
하지만!
java Hellokt 를 하지못한다. 즉 실행을 하지 못한다는 뜻.
이유 : kotlin/jvm/internal/Intrinsics에 들어있는 패키지가 필요하다.. 그래서 NoClassDefFoundError가 뜬다.
그래서 kotlin에서는 컴파일 권장 할 때, 아래와 같은 명령어로 jar 파일로 만들어준다.
kotlinc 파일명.kt -include-runtime -d hello.jar
위와같이 한다면 hello.jar 파일이 생성된다. 그리고 아래와 같이 실행한다.
java -jar hello.jar
출처 - 인프런 백기선 선생님 The java Manipluation 강의