본문 바로가기
  • 1+1=3
개발인강

[JAVA 복습] 자바구동방식, call by value , JVM 작동방식 등

by 여스 2021. 12. 27.
반응형

강의명: java TPC

 

ssafy를 시작하기 전에 자바 작동방식에 대해 공부를 더 하고자 관련 강의를 수강하기로 했다.  빠르게 복습하면서 헷갈리는 것 위주로 정리할 것이다.

 

자바의 구동방식

.java파일을 1차 컴파일하면 .class파일이 됨(소스코드가 바이트코드로 바뀜).

이 .class파일은 java프로젝트가 어떤 OS에서 실행될지 모르게 때문에 중간어 코드로서 존재함.

이를 windows나 mac os 위에 있는 jvm(java virtual machine)이 바이트코드를 읽어서 2차컴파일해서 실행가능하도록 하는것임.

 

변수,자료형,할당

- 기본자료형: 컴파일러에서 기본적으로 제공해주는 자료형

 

- Symbol Table(변수목록표)

변수를 선언하면, 메모리에 변수를 기억하는 공간이 생김. 

a가 100번지라는 걸 심볼테이블에 적어놨다가, 찾을 때 메모리 100번지가서 찾아오는 것임. 그래서 가끔 보는 cannot find symbol에러가 이런 뜻을 말한다.

- 사용자정의자료형에서의 VO, DTO?

Book이란  객체를 만들고 싶으면, class라는 도구를 이용해서 객체를 생성할 수 있다. 이 때, Book은 단순히 관련정보만을 가지고 있다면, Book VO(value object) 또는 Book DTO(data transfer object)라고도 한다.

 

Call by Value 와 Call by Reference

메서드 매개변수에 전달할 때, int 이런것처럼 값을 전달하는 것은 call by value이고, int[] 처럼 메모리 주소를 전달하는 형식은 call by reference이다.

 

JVM 동작방식 - static int add()인경우

1. 해당클래스를 현재 디렉토리에서 찾는다.

2. 찾으면 클래스 내부에 있는 staticc 키워드가 있는 메서드를 메모리로 로딩한다. - method영역의 static zone에 로딩한다.

3. static zone에서 main()메소드를 실행한다

  - main() 메서드가 호출되면 main() method 호출정보가 stack 영역에 들어간다

  - pc(program counter)가 main()을 가리킴. 그러다 다른 메서드 호출하면 걔를 가리킴

4. stack 영역이 비어있으면 프로그램 종료!

신기했던 건, 우리가 local 영역이라 부르던건 사실 stack area에서 pc가 가리키는 메서드 한 층을 이야기하던 거였음.

 

JVM 동작방식 - int add()인경우

new TCP08()하는 순간 heap 영역에 객체사 생성되는데, 이 주소를 Stack영역의 main메서드의 로컬변수인 tpc가 가리키게 됨. add()는 메서드라서 사실 이미 바이트코드로 method 영역의 non-static zone에 올라와있는데, 이 주소를 heap여역의 add가 포인터로 가리키고 있게 됨. 즉, stack 영역의 tpc -> heap영역의 add -> method영역의 add(바이트코드) 를 꼬리물면서 가리키게 됨

 

반응형

댓글