강의명: 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(바이트코드) 를 꼬리물면서 가리키게 됨
'개발인강' 카테고리의 다른 글
[운영체제] 컴파일과 프로세스 (0) | 2022.01.12 |
---|---|
[운영체제]데드락(교착상태) (0) | 2022.01.09 |
[운영체제]프로세스 동기화 (0) | 2022.01.09 |
[운영체제] cpu 스케쥴링 (0) | 2022.01.01 |
[운영체제] 프로세스와 쓰레드 (0) | 2021.12.31 |
댓글