study gomi

Java Day3 Java 프로그램 실행 구조 본문

basic/java

Java Day3 Java 프로그램 실행 구조

공부하곰 2024. 2. 15. 18:43
728x90
반응형

소스코드

- 개발자가 만드는 프로그래밍 코드

- 향후 기계가 알아 볼 수 있는 형태로 변경이 되어야지만 실행을 할 수가 있음.

 

기계어

- 프로그램을 실행하는 시스템이 알아 볼 수 있는 형태로 만들어진 기계 입장에서의 소스코드

- 기계어는 시스템마다 다른 체계로 되어져 있어 시스템에 맞는 기계어로 제작이 되어야 시스템이 인식하여 실행

 

컴파일러

- 개발자가 만든 소스 코드를 시스템이 인식할 수 있는 형태로 만들어 주는 소프트웨어

- 이러한 과정을 컴파일이라고 하고 컴파일을 해주는 소프트웨어를 컴파일러라고 부른다

- 컴파일을 하여 만들어지는 결과물은 언어마다 다름

- Java는 시스템이 인식할 수 있는 언어 체계인 기계어가 아닌 JVM이 인식할 수 있는 바이트 코드로 만들어진다.

- 이러한 바이트 코드는 프로그램이 실행될 때 JVM에 의해 자신이 운영하고 있는 시스템에 맞는 기계어로 변경되어 실행이 됨.

- 컴파일 명령어 : javac.exe 파일명.java

- 컴파일 후 만들어 지는 결과물 : 파일명.class

 

인터프리터

- 컴파일 후 만들어진 class 확장자로 된 파일은 바이트 코드로 되어져 있다(java)

- 그 파일을 실행 시 운영체제에 맞는 기계어로 변경 해주는 역할을 해주는 것이 인터프리터

- java에서 만들어진 class 파일은 실행 시에 기계어로 변경되어 실행이 됨.

- 인터프리터 명령어 : java.exe 파일명

- 하나의 프로그램은 많은 class 파일을 만들 수 있음.

- 프로그램을 실행 할 때는 많은 class 파일들 중 main을 가지고 있는 클래스의 이름을 적어주면 실행이 됨.

 

JVM(자바 가상 머신; Java Virtual Machine)

- 자바 바이트 코드를 실행할 수 있는 소프트웨어

- 인터프리터를 통해 실행 시 실행 되는 시스템에 맞는 기계어로 변환하여 프로그램을 실행.

 

JVM의 특성

- 스택 기반의 가상 머신 (실행되어지는 프로그램의 소스코드를 스택으로 관리) => 프로그램 실행 순서 명확

- 단일 상속 형태의 객체 지향 프로그래밍을 가상 머신 수준에서 구현 => 빠르고 정확하게 동작

- 포인터를 지원하되 c와 같이 주소 값을 임의로 조작이 가능한 포인터 연산이 불가능

- 가비지 컬렉션을 사용 => 메모리 관리 쉬움

- 모든 기본 타입의 정의를 명확히 함으로써 플랫폼 독립성 보장

- 예외 처리 지원 : 데이터 흐름 분석에 기반한 자바 바이트 코드 검증기를 통해 프로그램 실행시 발생되는 모든 위반 행위를 막아줌.

 

JVM의 장점

- 플랫폼의 독립성을 보장

- 바이트코드 실행의 안정성

- 높은 코드의 밀도

- 무선 통신 등 낮은 대역폭을 갖는 환경에서 요긴

 

JVM 단점

- 가상 컴퓨터가 필요 (jre)

- 가상 컴퓨터의 설치를 위해 여분의 기억 공간이 필요

- 가상 컴퓨터의 실행을 위해 CPU 자원의 일부가 소모

- 실행 속도의 저하 (많이 개선 됨)

 

Java 프로그램 실행 과정

- Java 파일 -> Java 컴파일러에 의해 class 파일 -> JVM이 각각의 실행 환경에 맞는 기계어로 변환

- 자바 실행 명령을 전송해야 함 (사용되는 플랫폼에 따라 다를 수 있다.)

- 일반적으로 java 클래스이름 실행어를 이용 (확장자 제외) : JVM에게 이 클래스 파일에 main이 있다고 알려주는 것

- java 클래스에서 모든 시작 지점은 main => main을 가지고 있는 클래스 이름 적어주면 됨.

- JVM은 지정한 class에서 main이라는 기능을 찾게 되고 그 내부 코드를 작동 시켜 프로그램을 실행.

- main이 없다면 오류 메시지를 보여주면서 실행이 중단.

 

728x90
반응형

'basic > java' 카테고리의 다른 글

Java Day5 상수  (1) 2024.02.21
Java Day4 기본 출력 / 식별자  (0) 2024.02.20
Java Day2 개발 환경 구축  (0) 2024.02.15
Java Day1 자바 언어의 소개  (2) 2024.02.03
java basic - print hello world  (0) 2023.12.11