본문 바로가기

Java/Java

(JAVA) JVM 구조

JVM은 크게 네 덩어리로 나누어져 있다.

해당 경로에는 바이트코드가 들어있다.

 

 

 

 

 

 

 

 

 

 

 

코드로 보이는 이유는 javap 같은 것을 사용해서 

사람이 볼 수 있게 코드로 보여준다.

 

원래는 바이트 코드가 있음.

 

 

 

 

 

 

현재 .class 파일 바이트코드의 진짜 모습

 

클래스 로더 시스템

  • . class에서. class에서 바이트코드를 읽고 메모리에 저장

  • 로딩: 클래스 읽어오는 과정

  • 링크: 레퍼런스를 연결하는 과정

  • 초기화: static 값들 초기화 및 변수에 할당

  •  

 

 

메모리

 

  • 메서드 영역에는 클래스 수준의 정보 (클래스 이름, 부모 클래스 이름, 메서드, 변수) 저장. 공유 자원이다.

  • 힙 영역에는 객체를 저장. 공유 자원이다.

    [아래 부분은 위의 영역과 달리 다른 모든 부분에 공유하지 않는다.]
  • 스택 영역에는 쓰레드 마다 런타임 스택을 만들고, 그 안에 메서드 호출을 스택 프레임이라  부르는 블록으로 쌓는다. 스레드 종료하면 런타임 스택도 사라진다.

스택 프레임 : method call 

에러 메세지 로그들을 보면 메서드가 여러 개 전시되는 것을 볼 수 있다.

스택에 메세지 호출 스택이 쌓여있음

  • PC(Program Counter) 레지스터: 스레드마다 스레드 내 현재 실행할 스택 프레임을 가리키는 포인터가 생성된다.

  • 네이티브 메소드 스택 (이것도 스레드마다 생긴다.)

https://javapapers.com/core-java/java-jvm-run-time-data-areas/#Program_Counter_PC_Register

 

Java JVM Run-time Data Areas - Javapapers

Understanding Java Virtual Machine (JVM) run-time data areas are critical to better Java programming. One of the most dreaded errors in Java

javapapers.com

 

해당 내용은 자바 프로파일링 할때 사용한다.

 

네이티브 메서드란?

메서드의 구현을 자바가 아닌 C나 C++로 하는 경우

ex)  Thread.currentThread();

native로 구현된 currentThread 메서드

https://medium.com/@bschlining/a-simple-java-native-interface-jni-example-in-java-and-scala-68 fdafe76f5f 

 

A Simple Java Native Interface (JNI) example in Java and Scala

The Java Native Interface (JNI) is a framework that allows your Java code to call native applications and libraries written in languages…

medium.com

 

실행 엔진

 

 

바이트코드를 인터프리터가 해석

한 줄씩  실행

한줄 씩 실행하면서 네이티브 코드로 변형한다.(기계가 이해할 수 있게)

 

 

  • 인터프리터: 바이트 코드를 한 줄 씩 실행. -> 한줄마다 네이티브 코드로 한줄 한줄 컴파일

 

  • JIT 컴파일러(바이트코드를 네이티브 파일로 컴파일): 인터프리터 효율을 높이기 위해, 인터프리터가 반복되는 코드를 발견하면 JIT 컴파일러로 반복되는 코드를 모두 네이티브 코드로 바꿔둔다. 그다음부터 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용한다.

  • GC(Garbage Collector): 더 이상 참조되지 않는 객체를 모아서 정리한다.


References

 

JVM Internals

Explains the internal architecture of the Java Virtual Machine (JVM) in simple terms using showing key components and how memory is updated during execution.

blog.jamesdbloom.com

 

The JVM Architecture Explained - DZone Java

This post explores the JVM architecture, what it is, how it operates, why it's useful, and presents a helpful diagram that highlights major JVM functionalities.

dzone.com

 

How JVM Works - JVM Architecture? - GeeksforGeeks

JVM(Java Virtual Machine) acts as a run-time engine to run Java applications. JVM is the one that actually calls the main method present in a… Read More »

www.geeksforgeeks.org