티스토리 뷰
[Java] JVM(Java Virtual Machine), JDK(Java Development Kit), JRE(Java Runtime Environment) 에 대해서 알고가기
강씨아저씨 2016. 2. 1. 21:47이 포스팅은 누군가에게 JVM,JDK에 대해서 설명하기보단 내가 까먹을꺼 같아서 정리하는 포스팅입니다a
혹시나 잘못된점이 있다면 불쌍한 후배프로그래머를 위해서라도 꼭꼭 알려주세요.
오랜만에 자바책을 다시봤는데 예전에 알고있다가 잊어버린 내용들과 아예모르고 있던 내용들이 많이 있어서
다시 잊어버리기 전에 하나씩 포스팅할 예정입니다.
JVM,JDK,JRE에 대해서 정리하기전에 우선 간단한 자바 사용환경부터 다시 정리해야겠다.
- JavaSE(Java Standard Edition)
자바 표준 플랫폼으로 JVM운영환경과 API에 대한 개발환경을 갖추고 있다.
- JavaEE(Java Enterprise Edition)
J2EE라도 불리며 서버 기능 개발을 위한 플랫폼을 지칭한다. JavaSE를 바탕으로 웹 애플리케이션에
필요한 기능들이 추가 되어있다.
- JavaME(Java Micro Edition)
모바일 디바이스 혹은 셋탑 박스와 같은 임베디드 장비를 위한 개발에 사용되는 플랫폼으로 JavaSE의
기능을 축소해서 가볍게 만든 플랫폼이다.
자바가 다른 프로그래밍 언어와 확연히 구별되는 특징은 Write once, run Everywhere(한 번 작성하면 어디서든실행된다.) 라고한다.
즉 자바로 한 번 만든 어플리케이션들은 어떤 OS에서든 동일하게 동작한다는 의미이다.
그리고 이러한 특징을 가능하게 해주는것은 바로 JVM(Java Virtual Machine)덕분이다.
그렇다면 JVM이 어떤 형태로 동작하는지 알아보자.
1. 클래스 파일
클래스 파일은 개발자가 만든 프로그램을 의미한다. .java 파일이 자바 컴파일러에서 컴파일 과정을 거치면 .class 파일이 생성된다.
이렇게 해서 생성된 클래스 파일은 JVM에서 실행이 가능하다.
2. 클래스 로더 서브 시스템
1에서 생성된 클래스파일은 OS에서 직접동작하는게 아니라 JVM 위에서 동작한다. JVM은 실행한 클래스 파일을 읽고 메모리에 올려 놓는 과정을 거치는데
이를 클래스 로딩이라고 한다. 그리고 이 작업을 클래스 로더 서브 시스템이 담당한다. JVM이 메모리에 클래스 파일을 로딩하는 순서는 다음과 같다.
ㄱ. JVM에서 실행할 클래스 파일의 내부 구조를 분석한다.
ㄴ. 분석된 내용을 바탕으로 성격에 따라 구분하고각각 JVM의 적합한 메모리 영역에 데이터를 올려 놓는다.
ㄷ. 클래스가 실행되면 JVM의 실행영역의 힙 메모리로 복사되고 클래스를 실행시킨다.
3. 실행 데이터 영역
2에서 분석된 데이터를 저장하고 실행 도중 필요한 데이터를 저장하는 영역이다. 실행데이터 영역(Runtimedata area)는 크게 다섯개의 영역으로 구분되어 있다.
ㄱ. 메소드 영역
메소드 영역은 클래스 로더에 의해서 로딩된 클래스가 저장되는 곳이다. 클래스는 메소드와 변수로 구성되어 있는데 이를 클래스 메타정보라고 한다.
JVM에서 클래스를 실행하면 메소드 영역에서 클래스 정보를 복사하고힙 영역에서 메모리를 할당하여 실행한다. 메소드 영역은 JVM메모리 영역중
가장 먼저 데이터가 저장되는 영역이다.
ㄴ. 스택 영역
실행된 메소드 정보가 저장되는 곳이다. 실행이 끝나면 저장된 정보는 삭제된다. 저장되는 정보에는 매개변수,지역변수,복귀주소등이 있다.
ㄷ. 힙 영역
객체가 실행될때 생성해서 저장되는 영역이다. 즉 동적으로 데이터가 생성되고 소멸되는 영역이다.
ㄹ. 레지스터 영역
JVM이 수행할 명령어의 주소를 저장하는 공간이다.
ㅁ. 네이티브 메소드 스택 영역
OS의 시스템정보, 리소스를 사용하거나 접근하기 위한 영역으로 C,C++로 작성된 매개변수나 지역변수등이 저장된다. 직접접근하기는 어렵지만
JNI(Java Native Interafe)API를 사용하면 자바 프로그램에서 OS 시스템에 대한 접근이 가능하다.
4. XXX Generation 영역 들은 가비지 컬렉션에 관한것인데 내가 어설프게 설명하는것보단 자세하게 설명해주신분이 있어서 링크로 건다.
http://helloworld.naver.com/helloworld/textyle/1329
JDK와 JRE
책에서 그러는데 자바 개발자는 JDK와 JRE는 구분할수 있어야 한다고 한다. 그러나 나는 이 책을 읽기 전까지 잘 몰랐다. -_-;;
JRE - 자바 애플리케이션을 실행하기 위한 최소의 실행환경 즉, JVM과 기본 API들로 구성되어 있다.
JDK - JRE에서 제공하는 실행 환경뿐만 아니라 자바 개발에 필요한 여러가지 명령어가 포함된다. 가능하면 JRE보단 JDK설치를 권장한다.
누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~
'Java & Spring' 카테고리의 다른 글
[Java] Thread 동기화하기 (0) | 2016.02.01 |
---|---|
[Java] 데몬 스레드(Daemon Thread) 설정하기 (0) | 2016.02.01 |
[Java] ShutDownHook을 이용한 Thread비정상 종료에 대응하기 (0) | 2016.02.01 |
[Java] String과 StringBuffer의 차이 (0) | 2016.02.01 |
[Java] poi라이브러리를 사용해서 Excel 파일 읽기쓰기 (0) | 2016.02.01 |
- Total
- Today
- Yesterday
- mysql lock
- lock
- gap lock
- 루비
- Autoloading
- 페어프로그래밍
- MySQL 인덱스
- ruby
- MySQL
- ruby meta programming
- 엘라스틱서치 기초
- 루비 메타프로그래밍
- 갭 락
- 되추적
- 페어 프로그래밍
- dead lock
- Elasticsearch Cluster
- 넥스트 키 락
- MySQL 족보
- 루비 상수
- InnoDB
- metaprogramming
- 인덱스
- autoload_paths
- db
- 메타프로그래밍
- 트랜잭션
- next key lock
- innoDB lock
- Pair-programming
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |