목차
Java의 실행과정(feat. TCPSchool)😄
Java 프로그램의 실행과정을 기록한다.
물론 내부적으로는 더 복잡하지만 정말 간단히 정리해 본다.
컴파일 타임 환경😎
개발자가 코딩한 자바소스를 컴파일 시 자바 컴파일러가 JVM이 이해할 수 있는 자바 바이트 코드(.class)로 변환한다.
자바 클래스 파일(.java)
자바 컴파일러
자바 컴파일러는 자바 설치 시 javac.exe라는 실행 파일 형태로 설치됨
자바 바이트 코드(.class)
자바 바이트 코드는 JVM(자바 가상 머신)이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미함
자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불린다.
확장자는 .class이고 JVM이 설치되어 있는 곳 어디서든 실행 가능하다.
스프링 프로젝트의 경우 기본 경로는 target > classes > 프로젝트 패키지 경로에 생성된다.
아래는 전자정부프레임워크에서 컴파일된 바이트 코드 예시이다.
런타임(실행) 환경🙂
JVM(Java Virtual Machine)
JVM이란 자바 바이트 코드를 실행시키기 위한 가상의 기계라고 할 수 있다.
자바로 작성된 모든 프로그램은 이 JVM 위에서 작동되기에 JVM이 반드시 설치되어 있어야 한다.
위의 그림처럼 운영체제가 달라도 같은 JVM이 설치 되어 있다면 아무런 추가 조치 없이 동작 가능하다.
따라서 개발자는 한 번만 프로그램을 작성하면, 모든 운영체제에서 같이 사용할 수 있다는 장점이 있고
이를 두고 운영체에 독립적이라고 얘기한다.
단, 자바 프로그램과는 달리 JVM은 운영체제에 종속적이므로, 각 운영체제에 맞는 JVM을 설치해야 함
ex) 윈도우 운영체제 용 JVM을 리눅스에 설치하면 안됨
또한, 자바는 일반 프로그램보다 JVM이라는 한 단계를 더 거쳐야 하므로, 상대적으로 실행 속도가 느리다는 단점을 가지고 있음
JVM의 구성
1. 자바 인터프리터(interpreter)
자바 컴파일러에 의해 변환된 자바 바이트 코드(.class)를 읽고 해석하는 역할을 한다.
2. 클래스 로더(class loader)
자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 JVM과 연결됨
이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 클래스 로더이다.
3. JIT 컴파일러(Just-In-Time compiler)
JIT 컴파일러란 프로그램이 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러를 의미함
동적 번역(dynamic translation)이라고도 불리는 이 기법은 프로그램의 실행 속도를 향상시키기 위해 개발되었음, 즉 JIT 컴파일러는 자바 컴파일러가 생성한 바이트 코드를 런타임에 바로 기계어로 변환하는 데 사용함
4. 가비지 컬렉터(garbage collector)
JVM에서 사용하지 않는 메모리를 자동으로 회수해주는 역할을 함
따라서 개발자가 따로 메모리 관리를 하지 않아도 되므로, 더욱 손쉽게 프로그래밍을 할 수 있도록 도와줌
참조 : tcpschool, http://www.tcpschool.com/java/java_intro_programming
'IT > development' 카테고리의 다른 글
[php] laravel MVC 패턴(laravel ver 8.83.2) (0) | 2022.11.24 |
---|---|
[IDE] eclipse quick fix 작동 안될 때...(feat. stackoverflow) (0) | 2022.11.24 |
[Java] Java String convert to byte[], byte[] convert to String (2) | 2022.11.23 |
[php] php <-> cubrid driver 연동 (0) | 2022.11.23 |
[Java] Java Stream 사용법 정리(jdk 1.8 부터 사용 가능) (0) | 2022.11.23 |