
자바는 어떻게 실행되나요?
우리가 Java라고 작성하는 코드를 어떻게 인식하는지
내부 구조를 하나하나 뜯어보고
프로세스 순서가 어떻게 되는지
결과적으로 출력문이 어떻게 콘솔에 찍히는지 원리를 살펴보고자 합니다.
심화단계에 앞서 간단하게 JAVA의 개념과 특징에 대해 알아보겠습니다.
1995년 객체 지향 프로그래밍 언어로 개발된 Java는 C#과 문법적으로 유사성이 많으며 한국에서 가장 많이 사용되는 언어중 하나이다.
자바는 크게 3가지 에디션 JavaSE, Jakarta EE(Java EE), Java ME 으로 나뉜다.
Java는 플랫폼에 독립적인 언어로 C언어는 소스코드를 기계어로 직접 컴파일하여 링크하는 반면 자바 컴파일러는 바이트코드인 클래스 파일을 생성하고, 이 파일의 바이트코드를 읽은 뒤 기계어로 바꾸어 실행하는 것은 자바 가상 머신이다.
플랫폼에 종속적인 경우 윈도우 환경에서 빌드한 프로그램을 그대로 리눅스나 macOS에서 실행하는 것이 불가하다. 반면 자바로 작성된 프로그램은 자바 가상 머신만 설치되어 있다면 대체로 문제없이 동작한다. 이는 바이트 코드가 플랫폼이 아닌 자바 가상 머신에서 실행가능 하며, 프로그램 실행의 주체가 운영체제가 아닌 자바 가상 머신이기 때문이다. 이러한 특징을 일컬어 플랫폼에 독립적이라고 한다.
하지만 실상은 자바 가상 머신은 C언어로 쓰여진 이식성을 통해 이루어진 것으로 자바 가상 머신에 심하게 종속된 언어로 볼 수 있다. java의 플랫폼 독립성은 '플랫폼에 맞는 자바 가상 머신이 설치된' 상태라는 조건이 반드시 필요하다. 그럼에도, 플랫폼이 바뀐 상태에서 재컴파일 하지 않아도 바이너리를 그대로 쓸 수 있다는 것은 자바만의 특징이다.
자바의 심각한 단점 중 하나는 실행하는 과정에서 JVM이 반드시 완전하게 로딩되어야 하기 때문에 프로그램의 초기 시작 시간이 비교적 오래 걸린다는 것이다. 이진 코드로 컴파일된 프로그램을 실행하는 것과 비교해 오래 걸린다. 런타임 자체가 아직 모듈화 되지 않았다는 가정하에. "Hello world!" 하나를 찍는다고 해도 스레드가 10개 가량 뜨게 된다. Java 9부터는 라이브러리가 모듈화 되어 요즘과 같은 고사양 컴퓨터에서는 체감상 크게 차이나지 않는다.
그 외에도
참고
wiki