Java와 JVM -1

Newbie's Log 2014. 10. 6. 22:35


회사에 입사하기전 여러군데에서 면접을 보면서 간혹 java에 특징에 대해 말해보라는 질문을 받곤 했었다. 

그러면 나는 객체지향 프로그래밍 언어의 한 종류이며, 플랫폼에 독립적어서 어디서나 실행된다는 말을 내뱉곤 했다. 단순히 java기본서에서 외워서 대답하던 것이었는데 나는 그것을 단순히 외우기만 할 뿐 왜 플랫폼에 독립적인지 그 이유에 대해선 따로 생각하지 않고 있었다. 회사에 입사하고 난 후에도 말이다. 


개발자로서 일을 한지 8개월이 되가고 있는 지금, 내가 java를 이용해서 개발을 하고 있는데 나는 java에 대해서 얼마나 알고 있을까 이런 생각이 들었다. 그래서 한 개발자 커뮤니티에서 운영하는 java와 jvm을 주제로 하는 스터디에 참여하게 되었다. 스터디를 하면서 나 혼자 알고 있기엔 너무나 아까운 내용도 많고, 공부한 내용도 정리 할겸 포스팅을 하려고 한다. 


Java는 단순히 프로그래밍 언어라는 틀에 가두기에는 너무나도 큰 개념이다 

"Write Once, Run Everywhere"라는 하나의 철학(물론,JRE에 기반하기 때문에 꼭 그렇지만은 않다;;;)으로 시작되어 발전된 개념인데 이 철학을 실현하기 위해 Java는 네 가지의 상호 연관된 기술을 엮어놓았다. 


- The Java Programming Language

- The Java Class File Format

- The Java Application Interface

- The Java Virtual Machine(JVM)


위에 4가지의 기술들을 살펴보기전에 우리가 Java로 프로그램을 만들어 수행하는 과정에 대해 알아보자.


우리가 Java Source Code를 작성하면 java라는 확장자를 가진 파일로 만들어지게 된다.

Java Source파일은 단순히 코드만을 담고 있는 파일일 뿐, 이 자체로는 수행 불가능하므로 수행하도록 하기 위해서는 Class 파일의 형태로 변경해 주어야 한다. 이 작업을 Compile이라고 한다. 


Java에서 Compile은 보통 JDK에 내장되어 있는 'javac'라고 하는 Compiler를 이용하여 수행한다




이 작업을 수행하면 Source File과 같은 이름이지만 class라는 확장자를 가지는 Binary파일이 생성된다. 

이 class라는 확장자를 가진 파일은 수행이 가능한 형태의 파일이다. exe파일처럼 수행할수 있는 형태가 아니라 단순히 수행 가능한 형태라는 말이다. 

이것을 수행하기위해서는 적어도 JRE(Java Runtime Environment)라는 것이 필요하다. 물론 JDK도 가능하다. 


이 프로그램을 수행하기 위해서는 ' java'라는 프로그램을 호출하여 우리가 생성한 Class파일을 인수로 제공하면 된다. 이때  'java'라고 하는 프로그램은 Java실행 환경에 Class파일을 가지고 들어가는 역할을 하게 된다. 이러한 수행과정을 좀 더 자세히 살펴 보면 다음과 같다. 'java'라고 하는 프로그램은 Java Virtual Machine을 하나의 프로세스로 올리는 작업과 함께 Class파일의 로딩도 수행한다. 

그 이후 Class파일을 분석하여 JRE내에 있는 Java Application Program Interface(Java API)와 더불어 프로그램을 수행하도록 하는 것이다. 


java라는 확장자를 가진 소스파일로 Class파일로 생성하는 시점을 Compile Time이라고 하고, 앞서 생성된 Class파일을 수행하는 시점을 RunTime이라고 한다. 


앞서 언급한 4가지 기술


- The Java Programming Language

- The Java Class File Format

- The Java Application Interface

- The Java Virtual Machine(JVM)


들이 아래의 그림에 모두 포함되어 있다. 




처음 프로그램을 작성할때는 Java Programing Language이고, 작성한 프로그램을 Compile하면 Java Class File Format으로 변경된다. 이를 수행하기 위해서는 Java Virtual Machine을 구동시며 Class파일을 로딩한다. 

JVM으로 로딩된 프로그램은 단독으로 수행되는 것이 아니라 Java Application Pragramming Interface와 동적으로 연결되어 실행되는 것이다.


다음포스팅에서는 각각의 4가지 기술들에 대해 자세히 알아보는 시간을 가지겠다.

그때까지 See you soon!


참고

Java Perfomance Fundamental(김한도 저) 


Posted by 알 수 없는 사용자
,