[Java] 자바는 어떻게 실행되나요? - 개요

haeun·2024년 3월 14일
0

자바는 어떻게 실행되나요?

우리가 Java라고 작성하는 코드를 어떻게 인식하는지
내부 구조를 하나하나 뜯어보고
프로세스 순서가 어떻게 되는지
결과적으로 출력문이 어떻게 콘솔에 찍히는지 원리를 살펴보고자 합니다.

심화단계에 앞서 간단하게 JAVA의 개념과 특징에 대해 알아보겠습니다.




1. 개요

1995년 객체 지향 프로그래밍 언어로 개발된 Java는 C#과 문법적으로 유사성이 많으며 한국에서 가장 많이 사용되는 언어중 하나이다.

자바는 크게 3가지 에디션 JavaSE, Jakarta EE(Java EE), Java ME 으로 나뉜다.

  • JavaSE : Java 핵심 API와 기능 제공
  • Jakarta EE(Java EE) : 기업에서 운영하는 서버 페이지에 특화된 에디션. JSP와 서블릿을 비롯한 웹 어플리케이션에 관련된 기술 포함 됨
  • Java ME : 피처폰, PDA, 셋톱박스 등 임베디드 시스템에 특화



2. 특징

Java는 플랫폼에 독립적인 언어로 C언어는 소스코드를 기계어로 직접 컴파일하여 링크하는 반면 자바 컴파일러는 바이트코드인 클래스 파일을 생성하고, 이 파일의 바이트코드를 읽은 뒤 기계어로 바꾸어 실행하는 것은 자바 가상 머신이다.

플랫폼에 종속적인 경우 윈도우 환경에서 빌드한 프로그램을 그대로 리눅스나 macOS에서 실행하는 것이 불가하다. 반면 자바로 작성된 프로그램은 자바 가상 머신만 설치되어 있다면 대체로 문제없이 동작한다. 이는 바이트 코드가 플랫폼이 아닌 자바 가상 머신에서 실행가능 하며, 프로그램 실행의 주체가 운영체제가 아닌 자바 가상 머신이기 때문이다. 이러한 특징을 일컬어 플랫폼에 독립적이라고 한다.

하지만 실상은 자바 가상 머신은 C언어로 쓰여진 이식성을 통해 이루어진 것으로 자바 가상 머신에 심하게 종속된 언어로 볼 수 있다. java의 플랫폼 독립성은 '플랫폼에 맞는 자바 가상 머신이 설치된' 상태라는 조건이 반드시 필요하다. 그럼에도, 플랫폼이 바뀐 상태에서 재컴파일 하지 않아도 바이너리를 그대로 쓸 수 있다는 것은 자바만의 특징이다.



3. 문제점

자바의 심각한 단점 중 하나는 실행하는 과정에서 JVM이 반드시 완전하게 로딩되어야 하기 때문에 프로그램의 초기 시작 시간이 비교적 오래 걸린다는 것이다. 이진 코드로 컴파일된 프로그램을 실행하는 것과 비교해 오래 걸린다. 런타임 자체가 아직 모듈화 되지 않았다는 가정하에. "Hello world!" 하나를 찍는다고 해도 스레드가 10개 가량 뜨게 된다. Java 9부터는 라이브러리가 모듈화 되어 요즘과 같은 고사양 컴퓨터에서는 체감상 크게 차이나지 않는다.

그 외에도

  • 가상 머신 바이트코드 실행 속도의 문제
  • 가비지 컬렉션에 의한 메모리 프리징으로 실행 지연 문제 - Java 8부터 static 인스턴스와 리터럴 문자도 GC의 대상이 되었다. 클래스, 메소드, 배열의 메타 정보는 Metaspace(동적 리사이징이 가능)으로 이동해 힙 공간이 늘어나고 PermGen Area를 없애 성능이 대폭 향상되었다.
  • 불편한 예외 처리 - 다른 언어와 달리 검사가 필요한 예외는 프로그래머가 선언을 해줘야한다. 그렇지 않으면 컴파일이 안된다는 불편이 존재하는데 Exception 하나로 대충 던져 놓거나 폭탄 돌리기를 하는 경우가 발생하기도 한다. 하지만 발생할 수 있는 예외를 인지하고 처리하는 것에 있어서는 장점으로 취급되기도 한다.
  • 다른 언어에 비해 긴 소스 코드 길이
  • 클로저 미지원
  • 문자열 비교가 상대적으로 불편 - primitive 타입 외에는 모두 Object로 처리하는 자바의 특징 때문에 String 또한 Object로 인식되어 주소로 비교된다. 특이한 점은 Object로 취급하면서도 문자열 자체는 메모리에 캐싱을 해둔다. 외부에서 XML, JSON의 문자열을 검증할 때 디버깅이 어려워 진다는 문제점이 있다.
  • 서버 리스에 적합하지 않음 - 상시 가동이 아닌 리퀘스트 발생 시에만 애플리케이션이 가동되는 형태로 JVM이 완벽하게 기동되어야 하기 때문에 인터프리터보다 반응이 느리다.











참고
wiki

profile
환영합니다 :) 이 곳은 개인 공부를 정리하고 창의적으로 활용하기 위한 제 2의 전두엽으로 활용되고 있으며, 오류에 대한 피드백은 댓글로 남겨주시면 감사하겠습니다.

0개의 댓글