[kosta] Reference Type & JVM

cokesh·2022년 4월 24일
0

kosta

목록 보기
3/9
post-thumbnail

Reference Type

전까지 기본타입으로 변수를 선언하고 데이터를 저장하였다면 오늘 배운것은
객체의 번지를 참조하는 타입이다.
참조타입에는 배열 / 열거 / 클래스 / 인터페이스

참조타입으로 선언된 변수는 메모리의 번지를 값으로 갖는다.번지를 통해 객체를 참조한다는 뜻에서 참조타입이라고 부른다.

변수는 스택이란 영역에 생성이 되고 객체는 힙 영역에 생성된다.
String 타입 변수에 저장을 할 경우 주소값이 스택영역(?)에 저장이 되고 생성된 주소가 참조하는 값이 힙영역(?)에 객체로 생성이 된다.

주소를 통해 객체를 참조한다는 뜻에서 String 클래스 변수를 참조타입 변수라고 한다.

그렇다면 스택영역은 무엇이고 힙영역은 무엇일까?
자바는 JVM이라는 자바가상기계라는 가상의 운영체제를 갖고 있다. 이는 바이트코드를 해석하고 실행하는 역할을 한다.
JVM은 실행할 때 운영체제에서 할당받은 메모리 영역을 여러 영역으로 나누어 사용한다.

메소드영역

메소드 영역이 하는 역할은 코드에서 사용되는 .class 들을 클래서 로더로 읽어 클래스 별로 런타임 상수풀, 필드 데이터, 메소드데이터, 메소드 코드, 생성자 코드 등을 분류하여 저장한다.
메소드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다.

JVM이 뭔가를 실행하려면 먼저 그 바이트 코드들이 메모리 공간에 저장이 되어있어야함.
JVM은 메인 메소드를 호출하는 것으로 시작을 함. 여기서부터 프로그램이 시작이됨.

힙영역

힙영역은 객채와 배열이 생성되는 영역이다.
그렇게 생성된 객체와 배열은 JVM스택 영역의 변수나 다른 객체의 필드에서 참조한다. 하지만 참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 이것을 쓰레기로 취급하고 Garbage Collector를 실행시켜 쓰레기 객체를 힙영역에서 자동으로 삭제한다.

스택영역

스택영역은 각 스레드마다 하나씩 존재하며 스레드가 시작될때 할당이 된다.
메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행함.
프레임 내부에는 로컬 변수 스택이 있는데, 기본타입 변수와 참조타입 변수가 추가 되거나 제거된다.
변수가 이 영역에 생성되는 시점은 초기화가 될때, 최초로 변수에 값이 저장될 때이다.

클래스를 실행시키면
1. .class파일 찾기
2. 클래스를 JVM에 로드함.
3. 바이트코드를 검증
4. 0과1로 재해석
5. 클래스 영역에 기억시킨다.
6. static 변수 자동초기화됨.
7. main() 호출함.

profile
개발 공부로그~

0개의 댓글