본문 바로가기

CS

자바 프로그램 실행 과정 및 기본 구조

📌 자바 프로그램 실행 과정

1. Java로 프로그래밍된 파일을 실행하면 자바 컴파일러가 Java Byte Code 형태의 .class 파일을 생성합니다.

2. JVM은 .class 파일을 메모리에 로드 시키고 인터프리터나 JIT 컴파일러에 의해 한줄씩 실행됩니다.


📌 Java Byte Code

JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미합니다. 자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1 Byte라서 Java Byte Code라고 불립니다.

💡 Java complier는 JDK를 설치하면 bin 폴더에 존재하는 javac.exe를 말합니다. 

📌 JVM

Java Virtual Machine의 줄임말로 자바를 실행하기 위한 가상 머신으로 OS에 종속 받지 않고 CPU가 자바를 인식하고 실행할 수 있게 하는 가상 컴퓨터 입니다. 

 

Class Loader : JVM의 메모리에 class 파일들을 Load 합니다.

 

✅ JVM Memory 구조 

 

🔨공유 영역 

  • Stack 영역 : 함수의 매개 변수, 지역 변수, 리턴 주소 등을 저장
  • PC Register : 현재 실행중인 명령어를 저장
  • Native Method Stack : 자바 외의 언어인 C나 C++ 등의 코드들이 저장

🔨 스레드별 영역

  • Method Area : 전역 변수, 정적 변수, 메소드 정보 등을 저장
  • Heap 영역 : 배열이나 벡터 같이 동적으로 메모리를 할당해야 하는 요소들이 저장

 


📌JIT compiler

JIT는 Just-In-Time의 약자로 프로그램을 실제로 실행하는 시점에 기계어로 번역하는 컴파일러 입니다. 기존 인터프리터 방식의 단점을 보완하기 위해 도입되었습니다. 기존 인터프리터 방식으로 한줄씩 실행하다 적절한 시점에 바이트 코드 전체를 컴파일해 기계어로 변경하고 이후에는 더 이상 인터프리팅 하지 않고 기계어로 직접 실행합니다. 컴파일된 코드는 캐시에 보관하기 떄문에 한 번 컴파일된 코드는 빠르게 수행됩니다.

 

정리하면 자바에선 자바 컴파일러가 자바 프로그램을 Java Byte Code로 변환하고 JVM이 바이트 코드를 JIT 컴파일러를 통해 기계어로 변역해 실행합니다.


📌 가비지 컬렉션

JVM에서 메모리를 관리해주는 모듈로 더 이상 참조되지 않는 객체들을 메모리에서 제거하는 모듈입니다.

📌 객체 지향 프로그래밍

현실 세계의 사물같은 객체를 만들고 객체에서 필요한 특징을 프로그래밍으로 수행

객체지향의 4대 특징 

  • 캡슐화 : 접근 제한자를 사용해 객체의 내부 정보를 은닉화 하고 객체간의 결합도를 낮춘다
  • 추상화 : 중요하거나 공통적인 특징만 표현하고 필요하지 않은 부분은 제외하고 모델링 한다.
  • 상속성 : 기존 클래스의 기능을 이어받아 코드의 재사용성과 유지 보수성을 향상 시킨다.
  • 다형성 : 오버로딩이나 오버 라이딩 같은 방식으로 하나의 메소드를 다양하게 사용할 수 있다.

📌 추상 클래스 vs 인터페이스

추상 클래스 : abstaract 지시자를 사용하며 하나 이상의 추상 메소드가 포함되어 있습니다.

인터페이스 : interface 지시자를 사용하며 모든 메소드가 추상 메소드로 정의 되어있습니다

차이점 : 추상 클래스는 상속을 통해 기능을 재사용하고 확장하며 인터페이스는 함수의 기능을 인터페이스에 구현한 대로 강제합니다.

 

 

'CS' 카테고리의 다른 글

프로세스와 스레드  (1) 2023.12.31