Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 징검다리
- 카카오인턴
- 이진탐색
- 스프링
- 토비의스프링
- 11723
- 플로이드워셜
- Spring
- 쇠막대기 문제
- bitmasking
- 스프링프로젝트 시작하기
- Singtone
- 백준
- 알고리즘
- sope
- 그래프
- Spring이란
- 구현
- 가장먼노드
- 이진검색
- 프로그래머스
- 자바
- 전화번호 목록
- @Profile
- Java
- BinarySearch
- 스프링이란
- Algorithm
- 플로이드와샬
- 카카오
Archives
- Today
- Total
육감적 코딩
[Java] JVM구조와 클래스 로더 시스템 본문
JVM
자바 가상 머신으로 자바 바이트 코드를 OS에 특화된 코드로 변환
바이트 코드를 실행하는 표준이자 구현체
JVM 구조
클래스로더 시스템
클래스 로더 시스템은 크게 세 가지로 볼 수 있습니다.
-
로딩 : 실제 클래스 파일에서 바이트 코드를 읽어오는 과정
-
링크 : 레퍼런스를 연결한다
-
초기화 : static 값들을 초기화 및 변수에 할당
메모리
-
스택 : 스택 영역에는 쓰레드 마다 런타임 스택을 만들고, 그 안에 메소드 호출을 스택프레임이라 부르는 블럭으로 쌓는다. 쓰레드를 종료하면 런타임 스택도 사라진다. (에러 발생 시 런타임 스택내역이 주르륵 뜨는 걸 볼 수 있습니다.)
-
PC 레지스터 : 쓰레드 마다 쓰레드의 현재 실행할 스택 프레임을 가리키는 포인터가 생성됩니다.
-
힙 : 객체를 저장. 공유자원입니다. (런타임 시 유동적으로 객체생성 할 때)
-
메소드 : 메소드 영역에는 클래스 수준의 정보 저장. 공유 자원입니다.
Q. 그럼 메소드안에서 생성한 로컬 인스턴스는 힙영역? 스택영역?
= 힙영역의 값을 스택영역이 참조하는 식. 즉, 힙영역에 메모리가 올라감.
클래스 로더 시스템
클래스 로더
로딩, 링크, 초기화 순으로 진행된다.
-
로딩
-
클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 ‘메소드’ 영역에 저장.
-
로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여”힙” 영역에 저장.
-
링크
-
Verify : .class파일 형식이 유효한지 체크한다
-
Preparation : 클래스 변수 (static 변수)와 기본값에 필요한 메모리
-
Resolve : 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체한다.
-
초기화
-
Static 변수의 값을 할당한다. (static 블럭이 있다면 이때 실행)
Comments