본문 바로가기
캠퍼스/Java

28.JVM

by Sylar 2022. 7. 31.

 

 

     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