본문 바로가기
JAVA & JVM

JAVA의 4가지 기술

by 샤워하다돌면워싱턴 2022. 8. 30.
반응형

"Write Once Run Anywhere!" (한번 쓰고 어느 곳에서도 실행)

이것은 자바의 가장 큰 특징이며,  그들이 만들고자한 목적이 담긴 슬로건이다.

 

이를 위해 필요한 기술은 크게 4가지이다.

  • Java Programming Language
  • Java Class File Format
  • Java API
  • JVM(Java Virtual Machine)

자바 프로그램을 만들기 위해 Java Programming Language를 사용하여 .java라는 파일이 생성한다.

이 파일은 단순히 소스코드만 갖고 있기 때문에 프로그램 실행을 위한 Compile과정을 거쳐 Class파일로 변환시킨다. (Java Compiler) 

변환된 Java Class File Format을 실행시키기 위해 JVM(Java Virtual Machine)이라는 가상머신을 구동시켜 클래스 로더를 통해 분석하고 Java API와 더불어 프로그램이 실행된다.

 

1. Java Programming Language

 

Java의 Class파일은 JVM이 읽을 수 있는 형태로 번역된 것이다. 이것은 다시 JVM에서 실행 가능한 형태로 변형된다.

이때 실행을 위한 Linking작업이 나타나는데 Class 파일이 JVM 에 올라가게 되면 Symbolic Reference는 그 이름에 맞는 객체의 주소를 찾아서 연결하는 작업을 수행한다.  이를 Dynamic Linking 이라고 한다. 

이 기술로 인해 class파일의 크기를 작게 유지할 수 있어서, compile된 파일만 있으면 그대로 실행 가능하며 Network를 통해 전송된다.

배포함에 있어서 파일의 크기가 작을수록 유리하다. (Class파일은 Java철학에 적합)

또 이 언어의 특징인 Java의 생산성을 극대화 한다는 것은 Runtime Memory를 직접 관리하지 않고도, GC를 이용하여 자동적으로 메모리를 관리 가능하다는 것이다. 이 밖에도 다형성, 재사용성, 상속, 멀티 스레딩 등이 있다.

 

2. Java Class File Format

  • Byte Code
  • Platform에 독립적
  • Network Byte Order사용

JVM은 Class를 로딩한 후 Byte Code를 읽어 들여 실행 가능하도록 해석(Interpret)하는 과정을 거치게 된다. 

Byte Code는 JVM이 읽을 수 있는 언어이다. Class가 Load된 후에는 Execution Engine(JIT Complier, Hotspot Copiler)를 거쳐 실행된다. 

Java프로그램의 모든 code가 byte code의 binary형태인 class로 배포된다. 

JVM이 Byte code로 읽을 수 있는 한 ‘Platform에 독립적이다’라는 것을 의미한다.

Class파일이 작은 이유는 참조하는 lib를 포함하지 않고, Symbolic Reference만 있기 때문이다.

Byte Order는 메모리의 주소 값을 할당하는 방식인데, 서로 다른 계열의 CPU끼리 데이터를 전송 받을 때의 문제점을 해결하기 위한 일종의 약속이다. Network를 통해 데이터를 전송할 때 통일된 방식을 약속한 것이 Network Byte Order. Big Endian(점점 크게 주소 값 부여하는 방식)을 사용한다.

Symbolic Reference는 참조하고자 하는 대상의 이름만으로 참조관계를 구성한 것을 의미하며, Class파일이 JVM에 올라가면 참조하는 이름의 객체 주소를 찾아서 연결하는 작업을 수행. 이러한 작업을 Dynamic linking이라 한다.

 

3. Java API

 

Java API는 Runtime Library의 집합이라 할 수 있다. Class파일을 수행하기 위해 JRE(Java Runtime Environment가 필요한데,

이는 JVM과 Java API, Native Method 등이 포함되어 있다.

Java API는 Native Method를 통해 OS자원과 연계되고, 반대편은 Java 프로그램과 맞닥뜨리고 있다. (Interface역할)

Java에서는 Class파일 내에 있는 java.io.InputStream의 Symbolic Reference를 이용하여 Runtime 시, 해당하는 실제 File에 대한 접근은 Native Method를 통해 OS에 명령을 전달하게 된다. 

이후 OS는 실제 File IO를 일으키고, 그 결과 다시 Native Method를 통해 Java API로 전달되는 과정을 거쳐 프로그램이 실행된다.

 

4. JVM(Java Virtual Machine)

 

Java를 위한 것. 물리적인 형태가 아닌 Software로 Virtual. 하나의 축약된 컴퓨터와 같아서 Machine이라고 한다.

Java프로그램의 범주에 들어가는 모든 것들을 실행시키게 해주며, 메모리를 할당하고 관리한다.

또한 Thread관리 및 GC(Garbage Collection)와 같은 메모리 재생 작업도 수행.

JVM은 Class Loader System을 통해 Class 파일들을 JVM으로 로딩하고, 로딩된 class 파일들은 execution engine을 통해 해석된다.

(JVM내의 런타임 데이터 영역에 배치된 Byte Code들을 명령어 단위로 실행)

해석된 프로그램은 Runtime Data Areas에 배치되어 실질적인 수행하고, 이 과정 중 필요에 따라 쓰레드 동기화(Thread synchronization)과 GC(garbage collection)를 수행한다.

반응형

댓글