본 게시글은 수업 때 들은 내용을 참고하여 필자 본인이 이해하기 쉽게 풀어서 적었습니다.
1. 메인메모리(RAM)의 구조
메인메모리는 4가지의 영역으로 나누어진다.
- 코드(Code)
- 데이터(전역변수, 등)]
- heap
- stack
먼저 C드라이브에 있는 프로그램(Test.exe)를 클릭, 실행했다고 가정하자.
- HDD → 메인메모리 (이하 RAM) 으로 프로그램이 이동된다.
- 이때 프로그램(Test.exe)은 프로세스라는 형태로 CPU의 처리를 기다린다.
- RAM → CPU(프로세서)로 이동해서 프로세스(Test.exe)가 실행된다.
![](https://velog.velcdn.com/images/introduce131/post/b521031b-9ed4-459d-ac20-ab4d875616a4/image.png)
적절한 결과값을 CPU(마이크로 프로세서) 가 데이터나 heap같이 적절한 공간에 저장한다.
2. Java에서의 컴파일되는 과정을 알아보자
Java에서 컴파일 시, 먼저 'ByteCode'로 변환된다.
잠만, ByteCode가 뭔데 ?
작성된 소스 코드를 가상머신(JVM)이 이해할 수 있는 중간 코드로 컴파일한 것을 말한다.
바이트 코드를 뜯어보면 0과 1의 기계어가 아닌 어셈블리어 형태로 되어있는 것을 알 수 있다.
![](https://velog.velcdn.com/images/introduce131/post/1f75a498-9a4a-4b16-a6ed-c286110161a8/image.png)
그러면 JVM은 뭐야 ?
JVM(Java Virtual Machine) 은 직역하면 '자바를 실행하기 위한 가상 기계' 이다.
- OS(Windows, MacOS, Unix 등..)에 종속되지 않고 CPU가 Java를 인식, 실행할 수 있게 도와주는 가상의 컴퓨터라고 보면 된다.
- 왜냐면 Java의 가장 큰 장점 중 하나는 OS(운영체제)에 종속되지 않는다는 특징이 있기 때문이다.
만약 여러분들이 파일하나를 생성해서 자바 소스코드(Hello.java)를 작성했다.
- 이때 Hello.java는 컴퓨터가 이해하지 못하는 원시코드이다.
- CPU는 이 원시코드(Hello.java)를 인식하지 못하므로 컴파일(Compile)을 해줘야 한다.
컴파일 과정을 거친다면,
- JDK 안에 있는 Java Compiler를 통해 Hello.java → Hello.class 파일로 변환된다.
- 이 Hello.class 는 JVM(Java Virtual Machine)이 인식할 수 있는 바이트코드(Hello.class) 이다.
![](https://velog.velcdn.com/images/introduce131/post/5624938a-c0ad-4468-942e-4f7c092c4431/image.png)
하지만..?
- 바이트코드(Hello.class)는 기계어로 되어있지 않기때문에 CPU가 인식할 수 없다.
- 이때, JVM이 OS가 바이트코드(Hello.class)를 제대로 이해할 수 있도록 해석해준다.
- 따라서, 자바 바이트코드는 JVM이 실행해주기 때문에 OS에 상관없이 어디서나 실행이 가능하다.
![](https://velog.velcdn.com/images/introduce131/post/4dbb42af-7b17-4f6d-b139-4e4e4e9c3988/image.png)
3. C언어와 Java의 차이점을 알아보자
C언어의 실행파일(.exe)는 운영체제 바로 위에서 실행.
Java의 실행파일(.class)는 운영체제 위에 자바 가상기계(JVM) 위에서 실행.
![](https://velog.velcdn.com/images/introduce131/post/eea60638-111f-4afb-b8de-977094fd7bfc/image.png)
4. JDK와 JRE에 대해 알아보자
JDK (Java Development Kit) 란?
자바 개발자 도구, Java로 소프트웨어를 개발할 수 있도록 여러 도구를 제공한다.
JDK의 bin 디렉터리에 포함된 주요 개발 도구들..
- javac : 자바 소스를 바이트 코드로 변환하는 컴파일러 (자바 컴파일러)
- java : jre의 bin 디렉터리에도 있는 자바 응용프로그램 실행기
- jar : 자바 아카이브 파일 (JAR)을 생성 및 관리하는 유틸리티
- jdb : 자바 디버거
- JRE (Java Runtime Enviroment) : Java가 동작하는데 필요한 JVM, 라이브러리 등 다양한 파일들을 포함한다. Java를 실행하려면 JRE를 설치해야한다.
- JVM (Java Virtual Machine) : Java가 실제로 동작하는 가상 환경
JDK의 종류
- Java SE (Java Standard Edition)
- 표준 에디션의 자바 플랫폼. 자바 언어의 핵심 기능을 제공.
- 주요 패키지는 java.lang., java.io., java.util., java.awt., javax.rmi., javax.net.
- Java EE (Java Enterprise Edition)
- JavaSE에 웹 어플리케이션 서버에서 동작하는 기능을 추가한 플랫폼
즉, 서버 측 개발을 하기 위해 필요.
- JSP, Servlet, JDBC 등 기업용 애플리케이션을 개발하는데 필요한 다양한 것들이 포함된 플랫폼.
- Java ME (Java Micro Edition)
- 임베디드 기기들에서 구동되기 위한 환경을 제공하는 API를 모아둔 플랫폼.
- 제한된 자원을 가진 휴대전화, PDA 등에서 Java 프로그래밍 언어를 지원하기 위해 만든 플랫폼 중 하나이다.
JRE (Java Runtime Environment) 란?
- 자바 실행 환경, Java 프로그램 실행하려면 JRE 설치해야함
정리해보자
- Java로 프로그램을 직접 개발하려면 JDK가 필요
- Java로 만들어진 프로그램을 실행시키려면 JRE가 필요
추가 정보 )
- rt.jar 는 상시 메모리에 떠있음
- 모든 클래스 파일들의 객체들은 Object.class를 상속받는다
이클립스 설치는 여기 로 들어가세요
다음 글을 참고하였습니다! 소중한 정보 감사합니다 😘
https://doozi0316.tistory.com/
https://coding-factory.tistory.com/826