처음에 JAVA를 배우면서 헷갈리는 부분이다.
깊숙하게 들어가면 공부할 부분이 많다. 일단은 내가 검색하고 찾아본 부분을 정리한다.
JDK > JRE > JVM
JDK는 JRE를 포함하고 JRE는 JVM을 구현한다.
제일 밑에 있는 JVM 부터보면
# JVM
Java Virture Machine ( 자바 가상 머신 ) 의 역할은 무엇일까?
1. 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행.
2. JAVA와 OS사이에서 중개자 역할을 수행 ( JAVA가 OS에 구애받지 않고 재사용 가능하게 해줌 ).
3. 메모리 관리에 중요한 Garbage Collection을 수행.
자바프로그램의 실행과정을 통해 알아보자.
1. 프로그램이 실행되면 JVM은 OS로부터 필요한 메모리를 할당 받는다.
2. JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
3. 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환시킨다.
4. Class Loader를 통해 class 파일들을 JVM으로 로딩한다.
5. 로딩된 class 파일들은 Execution engine( 실행 엔진 ) 을 통해 해석된다.
6. 해석된 바이트코드는 Runtime Data Areas 에 배치되어 수행이 이루어진다.
위 실행과정 속에서 JVM은 필요에 따라 Thread Synchronization과 Garbage Collector 같은 관리작업을 수행한다.
JVM에 대한 더 자세한 내용은 내가 정리한 내용에 출처인
https://asfirstalways.tistory.com/158
에서 더 볼 수 있다.
#JRE
Java Runtime Environment ( 자바런타임 환경 ) 은 무엇인가?
간단히 말하면 다른 소프트웨어를 실행하기 위해 고안된 일종의 소프트웨어다.
그리고 아래 3가지가 포함된다.
1. 자바 클래스 라이브러리(Java class libraries)
2. 자바 클래스 로더(Java class loader)
3. 자바 가상 머신(Java Virtual Machine)
JVM 실행과정에서
4번인 클래스 로더를 통해 class 파일들을 JVM으로 로딩하는 과정이 있는데
이 클래스 로더를 JRE가 가지고 있고 자바 클래스 라이브러리에 연결한다.
아래 주소를 참조하였고 데브옵스나 스택, 힙, 메타스페이스 등의 저장공간에 관한 설명도 출처에 있다.
http://www.itworld.co.kr/t/61023/%EA%B0%9C%EB%B0%9C%EC%9E%90/110768
#JDK
Java Development Kit ( 자바 개발 키트 ) 는 무엇인가?
먼저 처음에는 JRE와 헷깔릴 수 있는데
JDK 는 자바 기반 소프트웨어를 개발하기 위한 도구들로 이루어진 패키지이고
JRE 는 자바 코드를 실행하기 위한 도구들로 구성된 패키지다.
그러니까 JDK는 개발자들이 자바 프로그램을 생성할 수 있게 해준다. 그로므로 JDK 안에 JRE와 JVM이 포함된다 할 수 있다.
JDK 의 버전과 패키지를 알아보자.
버전으로는 8버전이 많이 사용된다고 한다. 하위 호환성을 가지므로 안전성이 중요한 프로젝트가 아니라면 최신 버전을 받아도 될 것 같다. 참고로 람다식을 사용하려면 8버전 이상을 받아야 한다.
패키지는 3가지가 있다.
1. 자바 EE (EnterPrise Edition)
2. 자바 SE (Standard Edition)
3. 자바 ME (Micro Edition)
여기까지의 출처는 아래 주소에 있다.
http://www.itworld.co.kr/t/61023/%EA%B0%9C%EB%B0%9C%EC%9E%90/110817
자바 패키지에 대해서 조금 더 알아보자.
자바 EE는 자바 SE를 포함한다. SE가 기본적인 패키지라면 EE는 SE의 API에 추가로 있는 JAR파일들의 차이가 있다
자바 EE에서는 JSP, Servlet을 비롯하여 JDBC 쪽 많은 기술들이 포함되어 있다.
이에 비해 자바 ME는 EE와 SE와는 관련이 없고 임베디드 쪽에 사용할 때 사용된다.
'프로그래밍 > Java' 카테고리의 다른 글
쿼리 결과 xml, xls 파일로 특정경로 업로드하기 (0) | 2020.09.15 |
---|---|
프리징 현상 해결방법 (0) | 2019.12.18 |
생성자 (0) | 2019.09.22 |
접근제어자 (0) | 2019.09.22 |
static 변수와 static 메소드 이해와 사용예 (0) | 2019.09.18 |
댓글