티스토리 뷰

Java

JDK, JRE, JVM

yun jjang 2018. 11. 19. 22:41

컴퓨터 공학에서 '기계'란 'CPU'를 말한다.
따라서 '기계어'란 'CPU가 알아들을 수 있는 언어'를 의미한다.
계산은 cpu가 한다.(뇌 = cpu)

컴파일을 하면 기계어로 변환되어지는데.
기계어는 사람이 읽을 수 없기때문에
기계화 직전에 기계어와 매핑되어 사람이 읽을 수 있는 코드화 체계로 만들어진 어셈블 코드로 변한다.
그 후에 완전한 기계어가 만들어진다. (어셈블코드 ≒ 기계어 라고 할 수 있다.)

어셈블코드의 한 row line하나가 command라고 하는데 이것은 cpu command로써 cpu에게 명령하는 명령단위이다.
 
컴파일이란 사람이 만들어 놓은 코드를 (어셈블 코드로 만들고, 이것을) cpu가 알아들을 수 있는 명령어의 집합. 즉, 기계어로 만드는 것을 말한다.

흔히 사람들이 말하는 컴파일러x2 는 c++ 컴파일러를 말하고 그 컴파일 명령어는 g++를 사용한다.
<c컴파일러>의 최종 목적은 기계어.
컴파일러의 주된 기능은 인간의 코드를 기계어로 바꿔주는 것이다.
그 단계가 몇가지 있는데 가장 중요한 단계가 문법오류를 체크하는 것이다.

but
<자바 컴파일러>란 자바소스를 바이트코드로 바꿔주는 것이 자바컴파일러이다.
컴파일한 결과로 기계어로 만들어진 ~.exe파일이 생긴다.기계어~exe는 그 스스로 실행이 된다.

하지만 자바바이트 코드는 이미 기계어로 만들어진 java.exe 프로그램 위에 올라간것 java.exe가 먼저 실행 되고 그 위에 자바 컴파일 된 결과(~.class)

가 실행된다.
자바 클래스는 jvm에 의해서만 구동 될 수 있다. java.exe없이는~.class가 작동 될 수 없다.
<jdk가 컴파일(명령어 javac)을 하고 난 후 런타임시에 jvm이 클래스를 구동시켜주는 것이다.>

<c컴파일은>
윈도우즈에서 컴파일한것이 리눅스에서 돌아갈 수 없고, 그 반대도 불가능하다. ios에도 불가능하고.. 각각의 기계들의 cpu가 인식하는 명령어의 체계가 다르기 때문이다.
하나의 같은 결과를 위해 각 플랫폼 cpu 환경에 따라 다른 컴파일 코드 작업이 들어간다.
하지만
<자바 컴파일은>
이러한 다양한 cpu의 종속성에서 벗어나기 위해 jvm(가상cpu)을 사용해 계산을 하는 것이다. 


JDK : Java (sw)Development Kit
JRE : Java Runtime Enviornment


플래스 sdk = (sdk는 소프트웨어 디벨럽먼트 키트, sw개발 툴. 개발하기 위한 도구)
자바sdk = jdk(자바 개발툴)


톰캣은 독자적으로 돌아가는 것으로 이클립스는 단지 개발 도구에 불과하다.
이클립스는 톰캣에 위에 올라가는 웹어플리케이션을 개발하기 쉽게 해주는 툴이다.
톰캣은 톰캣 위에 올라가는 웹어플리케이션을 돌아가게 해주는 것.


<자바 파일이 실행 되기까지...>
=>자바파일이 jdk에 의해 컴파일 된다. jdk는 javac를 말한다.즉 컴파일러.
=> 컴파일을 하고 나면 바이트 코드라는 것이 만들어진다.이 바이트 코드는 클래스를 의미하고 컴파일의 결과로 .java라는 클래스 파일이 만들어진다.(컴파일의 결과)

=> 이 클래스는 JVM위에서 돌아간다. JVM은 java.exe를 말한다. 즉,jre(java.exe)는 컴파일된 클래스 소스를 실행시켜준다.