본문 바로가기
자바

jvm구조, 리플렉션

by kcj3054 2021. 12. 29.

jvm 구조

  • jvm에는 크게 클래스로더 시스템, 메모리, 실행 엔진등이 있다

클래스 로더 시스템

  • 클래스로더가 .class에서 바이트코드를 읽고 메모리에 저장

  • 클래스로더에는 로딩, 링크(레퍼런스를 연결하는 과정 ), 초기화 작업(static 값들 초기화 및 변수에 할당)이 있다

  • 클래스로더에서 로딩

    • 로더가 .class 파일을 읽고 바이너리 데이터를 만들고 "메소드 영역"에 저장(클래스, 인터페이스이름, 메소드와 변수를 저장)
      • 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성해서 "힙"영역에 저장

메모리

  • 메모리에는 스택, pc, 힙, 메소드등이있다.

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

  • 힙영역은 객체를 저장, 공유자원

  • 메소드, 힙 영역을 제외하고 스택 메소드 스택, pc는 스레드 단위로 보면서 독립적인 자원이다.

  • 스택 영역에는 쓰레드마다 런타임 스택을 만들고 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓는다.

  • 밑의 그림에서 스택영역을 보여주는 데 스택영역에 반화주소값, 매개변수, 지역변수를 두면서 호출을 할때 마다 스택을 만들어 놓고 블록으로 쌓는다 이렇게 많이 쌓이게 되면 스택이 가득차서 스택오버플로우가 발생하게된다.

출처 : tcp ip 코딩의 시작

리플렉션

'자바' 카테고리의 다른 글

lambda, stream, innerclass  (0) 2021.12.22
split(), StringTokenizer 차이  (0) 2021.12.21
cpp vs java (비교)  (0) 2021.12.10
자바  (0) 2021.12.03
toString  (0) 2021.12.02