jvm 구조
- jvm에는 크게 클래스로더 시스템, 메모리, 실행 엔진등이 있다
클래스 로더 시스템
클래스로더가 .class에서 바이트코드를 읽고 메모리에 저장
클래스로더에는 로딩, 링크(레퍼런스를 연결하는 과정 ), 초기화 작업(static 값들 초기화 및 변수에 할당)이 있다
클래스로더에서 로딩
- 로더가 .class 파일을 읽고 바이너리 데이터를 만들고 "메소드 영역"에 저장(클래스, 인터페이스이름, 메소드와 변수를 저장)
- 로딩이 끝나면 해당 클래스 타입의 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 |