티스토리 뷰
JVM (Java Virtual Machine)
JVM이란?
-
자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체다.
-
모든 자바 프로그램은 JVM 에서 실행 가능하다.
-
JVM은 OS로부터 메모리를 할당받아 자바 프로그램을 실행시킨다.
-
자바 프로그램은 JVM을 거쳐야 하므로 OS에 직접 제어받는 방식의 프로그램(ex. C, C++)보다 속도가 느리다.
-
자바 프로그램은 OS에 종속적이지 않고 JVM에 종속적이다.
JVM 구조
-
자바 프로그램이 실행되면 JVM은 OS로부터 자바 프로그램 실행에 필요한 메모리(Runtime Data Area)를 할당받고, 할당받은 메모리를 용도에 따라 여러 영역으로 나눈다.
JAVA 컴파일러
-
java 소스로 작성된 코드를 Byte Code로 변환시킨다.
-
확장자명이 .java 였던 파일이 .class(Byte Code)로 변화한다.
Class Loader
-
JAVA 컴파일러로부터 생성된 .class 파일들을 엮어 JVM이 운영체제로부터 할당받은 메모리영역인 Runtime Data Area로 적재한다. (자바 애플리케이션이 실행중일 때 이런 작업이 수행된다.)
Execution Engine
-
Class Loader에 의해 적재된 클래스(Byte Code)들을 기계어로 변경해 명령어 단위로 실행하는 역할을 한다.
Runtime Data area
-
자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.
-
크게 Static(Method) Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 나뉜다.
Static 영역
-
Class영역, Method 영역, Code 영역 등으로도 불린다.
-
멤버 변수의 이름, 데이터 타입, 접근제어자에 대한 정보가 저장된다. (Field Information)
-
메서드의 이름, 리턴 타입, 파라미터, 접근 제어자에 대한 정보가 저장된다. (Method Information)
-
Type의 속성이 Class인지 Interface인지의 여부를 저장한다. (Type Information)
-
Static 변수들을 저장 (모든 객체에서 공유할 수 있고, 객체 생성없이 접근 가능)
-
공유할 수 있는 자원들이다. 즉, 다른 스레드에서도 공유할 수 있다는 의미이다.
Stack 영역
-
메서드가 호출될 때마다 각각의 스택프레임(해당 메서드만을 위한 공간)이 생성된다.
-
메서드 안에서 사용되는 값들 즉, 지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등을 저장한다.
-
또한, 참조변수와 참조변수에 할당된 힙 영역 객체의 주소값이 저장된다. (주소값을 통해 힙 영역에 생성된 객체를 참조할 수 있다.)
-
공유자원이 아니다.
Heap 영역
-
new 연산자로 생성된 객체와 배열을 저장하는 공간이다.
-
Garbage Collector가 Heap 영역 내의 참조되지 않은 객체를 확인하고 제거한다.
-
공유할 수 있는 자원들이다. 즉, 다른 스레드에서도 공유할 수 있다는 의미이다.
참고자료
- Total
- Today
- Yesterday
- 스프링부트
- 회원가입
- 객체
- 리버스 프록시
- connectionless
- 웹 서버
- 인텔리제이
- Servlet
- 싱글톤 레지스트리
- AJAX
- 스프링 부트 시큐리티
- jvm
- 제네릭 메서드
- git
- JVM 메모리 구조
- 스프링
- 가상 회선 방식
- 멀티 프로세스
- github
- 상속
- 자바의 정석
- 유효성검사
- 람다식
- 전자정부프레임워크
- http
- 그래프 순회 알고리즘
- 클래스
- 메서드 참조
- stateless
- 포워드 프록시
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |