Contents
The Java Manipulation(1)
   Jun 28, 2022     3 min read

1.JAVA, JVM, JDK, JRE

  • 이번 섹션의 목표
    1. JAVA, JVM, JDK, JRE 이해하기

1. JVA, JVM, JDK, JRE 이란 ?

스크린샷 2022-06-28 오후 8 28 58

JAVA

  • 프로그래밍 언어 ( 아래의 코드와 같이 말 그대로 코드 )
public class App{
	public static void main(String[] args){
		System.out.println("Hello world");
	}
}

cf. JDK, JRE, JVM 등 포괄적인 의미로의 자바로 쓰이기도 한다 그래서 문맥에 따라 ‘자바’라는 말을 잘 이해해야한다.

  • JDK에 들어있는 자바 컴파일러(javac)를 사용하여 바이트코드(.class 파일)로 컴파일 할 수 있다

1.코드 생성

스크린샷 2022-06-28 오후 8 39 02

2.javac를 이용해서 컴파일

스크린샷 2022-06-28 오후 8 39 32

3.java파일 같은 경로에 .class 라는 파일 생성

스크린샷 2022-06-28 오후 8 41 22

4.바이트코드로 확인하는 방법 : javap -c 파일명.class

스크린샷 2022-06-28 오후 8 43 15

  • 자바 유효화? 라는 말의 의미
    • 오라클에서 만든 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)

스크린샷 2022-06-28 오후 9 25 21

2.컴파일을한다. kotlinc 파일명.kt

스크린샷 2022-06-28 오후 9 25 44

3.파일명kt.class가 생성 된다.

Untitled 5

4.바이트코드로 열어본다. javap -c 파일명kt

JVM으로 kotlin언어도 가능하다는 것이다.

Untitled 6

하지만!

java Hellokt 를 하지못한다. 즉 실행을 하지 못한다는 뜻.

Untitled 7

이유 : kotlin/jvm/internal/Intrinsics에 들어있는 패키지가 필요하다.. 그래서 NoClassDefFoundError가 뜬다.

그래서 kotlin에서는 컴파일 권장 할 때, 아래와 같은 명령어로 jar 파일로 만들어준다.

kotlinc 파일명.kt -include-runtime -d hello.jar

스크린샷_2022-06-28_오후_9 38 36

위와같이 한다면 hello.jar 파일이 생성된다. 그리고 아래와 같이 실행한다.

java -jar hello.jar

스크린샷 2022-06-28 오후 9 41 49

출처 - 인프런 백기선 선생님 The java Manipluation 강의