자바(Java)는 프로그래밍 언어 중 하나
자바 프로그램은 운영체제나 하드웨어에 의존하지 않은 바이트 코드인 추상적인 코드로 구현
다른 프로그래밍 언어와는 다르게 자바 프로그램을 실행시키기 위해서 자바 가상 머신(JVM)을 설치해야한다.
Java 프로그램을 개발할 수 있는 환경으로 Java 어플리케이션을 개발하기 위해 필요한 도구들을 제공
.java 파일들을 .class 파일들로 변환해주는 Java Compiler(javac) 기능이 있다.
코드를 디버깅하는 jdb 등의 기능이 있다.
자바 실행 환경
JRE는 .class 파일만 실행이 가능하다.
자바 가상 머신이라는 뜻을 가지고 있다.
여러가지 기기 위에 Java 프로그램을 실행시킬 수 있는 가상의 기기
JVM은 인터프리터와 JIT 컴파일러를 통해 바이트 코드를 각각의 운영체제에 맞는 기계어로 변환한다.
운영체제에 종속적이기에, 각 운영체제에 맞는 자바 가상 머신을 설치해야한다.
자바 프로그램은 JVM이라는 한 단계를 거쳐서 코드를 변환하기에 상대적으로 실행 속도가 느리다.
가비지 컬렉터(Garbage Collector)를 통해 동적 메모리를 관리한다.
자바에서 만들어진 .java 파일(자바 소스 파일)을 javac(자바 컴파일러)에 의해 .class 파일(자바 바이트 코드)로 변환된다.
.class 파일의 바이트 코드를 읽어 JRE로 가져온다. (클래스 로더가 운반하는 역할)
JRE에서 바이트 코드를 실행시키면 JVM이 실행이 된다.
JVM 위에서 JIT Compiler와 Java Interpreter에 의해 바이트 코드가 기계어로 해석되어 실행되어진다.
JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드
JVM에서 돌아가는 실행 프로그램을 위한 이진 표현법
바이트 코드는 JIT 컴파일러에 의해 바이너리 코드로 변환된다.
바이트 코드의 확장자는 .class 이다.
바이트 코드는 JVM이 읽는 언어로, 어떤 운영체제에서라도 JVM만 있으면 실행될 수 있다.
자바 바이트 코드(.class)를 JRE로 불러와서 메모리에 저장한다.
자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서 모든 코드가 자바 가상 머신과 연결
Java 프로그램의 실행에 필요한 모든 클래스를 동적으로 로드한다.
작성된 Java 코드(.java)를 JVM이 읽을 수 있는 바이트 코드(.class)로 변환하는 변환기
자바 컴파일러에 의해 변환된 바이트 코드를 읽고 한 줄씩 기계어로 해석하는 역할
프로그램이 실행 중인 런타임에 실제 기계어로 변환해주는 컴파일러
프로그래머가 동적 메모리를 관리하지 않고 프로그램이 알아서 자동으로 관리해주는 역할