JVM 에 대한 설명을 하겠다

같은이름의 변수를 두개 지정해도 에러가 나지 않는다. 그 이유는
static은 클래스별로 나뉘어져 있어서 같은 이름의 변수가 존재할수 있기 때문이다.

각각 대입된 변수가 출력되는 모습이다.

main 이라는 메서드가 실행 되면, 스택공간에 데이터를 저장하기 전에 하나의 통에 코드를 모두 담는다.
그 후에 순서대로 하나씩 코드를 실행한다. 이것을 큐가 비어진다고 한다.
큐는 힙에 있는게 아닌 main 스텍에 존재한다.
해당코드를 이용해서 작동순서 및 원리를 알아보자

main 큐 생성 > main 스텍 생성
36 35 34 ~ 29 28 27 > main 큐 앞쪽부터 팝해서 넘어옴
27 28 29 30 ~ 36 까지 실행
28 , println출력
29 , println출력
30 , Preson의 주소를 p에 대입
31 ~ 33 p.물마시기 실행 ( 100 -10 (31번) -10(32번) -10(33번)
= > 물마시기 스택 생성 후 이때 9번라인 실행
= > 같은 클래스 에서는 주소가 없어도 찾으나 다른 클래스에서는 주소가 있어야함.
= > 실행 후 물마시기 스택과 q이 각각 사라짐. ( 31 실행 -> 사라짐, 32 실행 -> 사라짐, ~ )
34 , p.목마름 출력 ( p에서 목마름 을 찾아 출력 ) 목마름 = > 70
35 , p. 달리기(10) 실행
= > 달리기 q 생성 ( 12 ~ 19 까지 코드 들어감, 12번인 이유는 인수가 포함되어있으면 한칸 앞꺼까지 같이 들어감 )
= > 달리기 스택 생성
= > speed = 10 들어감 -> 14 확인 (false) -> 16확인 (true) (if문이라 나머지 무시 ) -> 20 메서드 종료.
( 메서드 종료는 엄밀히 말하면 큐와 스텍이 종료된다라고 말함 )
36 , p.목마름 출력 ( 90출력 )
37 , 메인메서드 종료 ( main 큐, 스텍 종료됨 = 자바 종료 )
---------------------------------
만약 int가 아니라 String과 같이 크기를 알수 없는 자료들은 어떻게 데이터에 저장하는 것일까?
자료형 ( 원시 자료형 ) 특징
-> 사이즈를 알 수 있음 ( int, double, long, boolean ) < 개발자가 정해주는 공간만큼 만들어냄
가변적인 사이즈는 측정을 못함 ( 문자형 )
- > 메모리에 빈 공간을 크게 잡아놓고 들어올때 사이즈를 결정한다.
ex ) class Person
int age = 10;
int money = 1000;
Person p = new Person();
-> 이라고 할때, p의 사이즈가 얼마인지 모른다.
그래서 4byte로 할당하여 먼저 잡고 이후에 데이터 크기에 맞춤
class person {
int age = 10;
String name = "길동"
void 이름변경(){
this.name = "철수"
this = > 허공을 가르키고 있다가 다른 클래스에서 뷰 해줬을때 그곳을 가르킴. ( 같은 공간에선 heap 공간에서 가르킬 수 있다 )
}
}
다른 클래스
person p = new person;
p.name = " 철수 "
'캠퍼스 > Java' 카테고리의 다른 글
| 30. 코드 단순화 (0) | 2022.08.01 |
|---|---|
| 29. Array (0) | 2022.08.01 |
| 27.method (0) | 2022.07.31 |
| 26.Class (0) | 2022.07.31 |
| 25.else if (0) | 2022.07.30 |