오늘 이거 알았네요/Java

[JAVA] JVM 알아보기

로그관리자 2023. 1. 21. 14:34
728x90

 

 

 

 

 

JVM


네트워크에 연결된 모든 디바이스에서 작동하는 것이 목적
디바이스마다 운영체제나 하드웨어가 다르기 때문에 자연스럽게 플랫폼에 의존하지 않도록 언어를 설계
그 결과가 JVMJava Bytecode 다.

 

 

 

내부 구조

 

 

 

 


Runtime Data Areas

 

 

 

모든 스레드가 공유

 

 

Method Area

  • 클래스 로더가 클래스 파일을 읽어오면 클래스 정보를 파싱해서 Method Area에 저장
  • 변수 메소드 정적변수가 뭐가 있나 ,바이트 코드 가 어떤가 등등의 정보

Heap

  • 프로그램을 실행하면서 생성한 모든 객체를 저장

 

 

스레드마다 존재

 

 

 

1.

스레드메서드를 실행

PC는 그 메서드 안에서 바이트 코드 몇 번째 줄을 실행해야 하는지 나타내는 역할

 

 

2.

자바 스택은 스레드 별로 1개만 존재

스택 프레임메서드가 호출될 때마다 생성된다. 메서드 실행이 끝나면 스택 프레임은 pop되어 스택에서 제거 된다.

 

 

3.

Native Method는 Java Bytecode가 아닌 다른 언어로 작성된 메서드를 의미한다.  

 

 

 

 

 

Stack Frame ??

더보기

스택 프레임은 메서드가 호출될 때마다 새로 생겨 스택에 push 된다.

  • Local variables arry
  • Operand stack
  • Frame Data 를 갖는다.

 

프레임 데이터는

  • Constant Pool
  • 이전 스택 프레임에 대한 정보
  • 현재 메서드가 속한 클래스 / 객체에 대한 참조 등의 정보를 갖는다.
  •  

   

 

 

 

 

 

 

근데 

JVM은 왜 register를 안 쓰고 stack을 사용할까 ?

 

자바 네트워크와 균일하게 동작할 수 있음을 보장하고 싶어 

디바이스마다 레지스터 수가 다르므로 가정할 수 없다. → 레지스터 기반으로 하게 되는 순간 구현에 관여

스택을 쓰게 되면 계산 과정이 귀찮고 복잡하나 하드웨어 스펙에 최소한의 관여만 한다. >>> 추상화를 하기 위해서 스택을 사용

+ 네트워크 전송시 이득

 

 

 

 

 

 

 

 

 

 


 

 

 

테코톡 - 무민의 JVM Stack & Heap를 시청 후 정리한 내용입니다. 

728x90