Java & Kotlin

Java virtual Machine

필자A 2022. 8. 15. 22:58

 

 

 

 

 

 

참고 : https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html

 

JVM이란?

 

Java, Scala 같은 언어로 작성된 코드를 실행시켜주는 프로그램

 

 

 

 

 

1. JVM은 JRE의 일종이라고 할 수 있다.

 

2. JVM은 java 프로그래밍 언어에 대하여 모른다. class 파일 형식을 알고 있음

 

3. OS, hardware spec에 의존적이지 않다.

 

정확히 말하면 complie 된 class 파일이 환경에 의존적이지 않다.

그러나 JVM은 환경에 의존적이다. (자신의 PC환경에 맞는 JVM이 필요하다.)

이런 부분에서는 JVM은 인터페이스 간의 호환성을 해결해주는 Adapter의 역할을 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

JVM의 내부구조

 

 

 

 

 

 

RunTime 영역 (Run Time Data Area)

 

 

JVM은 프로그램 실행중에 사용되는 다양한 데이터를

Run time Data Area라는 논리적 영역에 적재 시킴

이중 일부의 데이터는 JVM의 시작과 종료의 생명주기가 동일하며

일부는 Thread의 시작과 종료에 일치한다.

 

 

 

 

 

 

Global, local Resources라는 명칭은 독자적으로 만든 것이므로

의미를 두지 않아도 됩니다.

 

Global Resources

 

globale Resources의 영역에 포함된 데이터는 모든 Thread에서 공유된다.

class, interface, array data의 정보(constructor, field method)가 저장되기도 하며

생성된 인스턴스의 정보가 저장된다.

그리고 적재된 데이터중 참조되지 않는 것 들은 CG의 타깃이 됨(버전과 정확한 위치에 따라 상이)

 

 

 

1. Method Area (static 한 영역)

class, interface, array data의 정보들이 담긴다.

 Runtime Constant Pool 영역이 포함되어 있다.

JVM구현체에 따라 GC의 타깃이 되기도 안되기도 한다.

 

 Runtime Constant Pool : 숫자 리터럴, 런타임에 확인되어야 할 메서드 및 필드참조 , 다양한 종류의 상수가 포함

 

1.1 Runtime Constant Pool ( in method area )

Method Area 안에 있으며 다양한 곳에 참조되는 데이터들이 모인다.

여러 데이터들이 있으며 #N으로 접근하여 참조한다.

java 버전에 따라 GC의 대상이 되기도 함 

 

 

 

 

2. Heap Area

runtime 환경 중 생성된 모든 객체(references type)들이 적재된다.

GC의 대상이 되며 모든 thread에 공유된다.

전역에서 생성된 primitive, references, non static or static data와

지역변수로써 생성된 references data가 적재된다.

 

 

2.2 String Constant Pool (in heap)

Java에서는 String은 보안, 성능, 동기화를 위하여 특별하게 관리한다.

literal방식으로 생성된 String의 정보는 SCP(String Constant Pool)에 포함되며

New 키워드가 사용되면 Heap영역에 포함된다.

Heap영역의 문자열 정보는 중복이 되어도

SCP안의 문자열 정보는 중복되지 않는다.

java 버전 마다도 다루는 방식이 달라서 다루는데 주의를 요한다.

 

 

 

Local Resources (per thread)

 

해당 영역의 특징은 thrade마다 존재하며 다른 thread에서 참조될 수 없다.

서버를 돌리면 요청마다 생긴다고 알면 된다.

 

 

1. Stack Area (Java Virtual Machine Stacks)

thread마다 생성된다.

 

1.1 Stack Frame(In Java Virtual Machine Stacks)

Stack Area안에 포함되며 지역변수

함수 호출마다 생성이 되며 함수 종료 시 제거된다.

부분 결과 저장, 메서드 결과 반환, 예외 전달의 역할을 한다.

 

2. PC Register

thread마다 생성

현재 실행 중인 상태 정보를 저장한다.

현재 수행 중인 부분의 주소를 가짐.

 

3.Native Method Stack

thread마다 생성

thread안에서 실행되는 native method정보가 저장된다.

 

 

 

 

 

 

 

 


 

반응형