일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- compose
- nullpointerexception방지
- Hilt
- Provider
- 자료형
- 자바
- ContentProvider
- composelifecycle
- 자바set
- 백준파이썬
- 프로그래머스
- Java
- filternotnull()
- Kotlin
- 백준
- 문자열
- Python
- 리스트
- programmers
- 파이썬문법
- android
- jetpack
- disposableeffect
- Dependency
- 티스토리챌린지
- list
- 파이썬
- 오블완
- 자바리스트정렬
- 배열
- Today
- Total
study gomi
Java Day3 Java 프로그램 실행 구조 본문
소스코드
- 개발자가 만드는 프로그래밍 코드
- 향후 기계가 알아 볼 수 있는 형태로 변경이 되어야지만 실행을 할 수가 있음.
기계어
- 프로그램을 실행하는 시스템이 알아 볼 수 있는 형태로 만들어진 기계 입장에서의 소스코드
- 기계어는 시스템마다 다른 체계로 되어져 있어 시스템에 맞는 기계어로 제작이 되어야 시스템이 인식하여 실행
컴파일러
- 개발자가 만든 소스 코드를 시스템이 인식할 수 있는 형태로 만들어 주는 소프트웨어
- 이러한 과정을 컴파일이라고 하고 컴파일을 해주는 소프트웨어를 컴파일러라고 부른다
- 컴파일을 하여 만들어지는 결과물은 언어마다 다름
- 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이 없다면 오류 메시지를 보여주면서 실행이 중단.
'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 |