JAVA

김지환·2020년 3월 18일
0

JAVA

: JAVA는 객체지향 프로그래밍 언어 중 하나이다. 바이트코드인 바이너리 형태로 컴파일 된 후 JVM상에서 실행되며 아키텍처가 중립적이며 이식성이 높다.


JVM(Java Virtual Machine)

: 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체로서 CPU나 여러 운영체제(플렛폼)과 동작 가능하다. JVM은 크게 4가지 (Class Loader, Execution Engine, Garbage Collector, Runtime Data Area)로 구성된다.

1. Class Loader

자바에서 소스를 작성하면 .java파일이 생성된다. 이렇게 생성된 클래스파일들을 엮어서 JVM이 운영체제로부터 할당받은 메모리영역인 Runtime Data Area로 적재하는 역할을 한다.

2. Execution Engine

Class Loader에 의해 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경해 명령어 단위로 실행하는 역할을 하여 네이티브로 컴파일된 코드를 실행하는 것으로 성능을 높인다.

3. Garbage Collector

Garbage Collector는 Heap 메모리 영역에 생성된 객체들 중에 참조되지 않는 객체들을 탐색 후 제거하는 역할을 하며 GC가 수행되는 동안 수행중인 쓰레드가 아닌 다른 모든 쓰레드가 일시정지되는 특징을 가진다.

4. Runtime Data Area

JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.

이 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack로 나눌 수 있다.


Runtime Data area 구조

1. 메소드 영역

클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보같은 필드 정보와 메소드의 이름, 리턴 타입, 파라미터, 접근 제어자 정보같은 메소드 정보, Type정보(Interface인지 class인지), Constant Pool(상수 풀 : 문자 상수, 타입, 필드, 객체 참조가 저장됨), static 변수, final class 변수등이 생성되는 영역이다.

2. 힙 영역

객체와 배열이 생성되는 영역이다. 메소드 영역에 있는 클래스만 생성이 가능하고, GC가 참조되지않는 메모리를 확인하고 제거하는 영역이다.

3. 스택 영역

임시로 값이 생성되는 영역으로 스택영역에 생성된 변수의 값으로 힙 영역의 주소를 가지고 있고 메소드를 호출할 때마다 개별적으로 스택이 생성된다.

4. Program Counter

쓰레드가 생성될 때마다 생성되는 영역으로 다음에 실행할 명령어의 주소를 기억하는 CPU의 레지스터 중 하나이다.

5. Native method stack

자바 외 언어로 작성된 네이티브 코드를 위한 메모리영역으로 쓰레드가 생성되었을 경우 메소드와 힙 영역은 모든 쓰레드가 존재하지만, 스택,PC,네이티브는 각각의 쓰레드 마다 생성되고 공유되지 않는다.

profile
Web Developer

0개의 댓글