2022-05-27 데일리 회고

Sung-min Seo·2022년 5월 30일
0

🥕 JVM(Java Virtual Machine)

JVM은 자바를 실행하기 위한 가상 기계이다. 기본적으로 자바소스 파일의 형태는 .java이다. 컴파일러가 실행되면 .java 파일은 .class 파일로 변환되고 class loader를 통해 jvm에 올라가게 된다. 이렇게 올라간 파일들은 JVM을 사용함으로써 OS의 종류에 구애 받지 않고 파일을 실행할수 있게 된다.

🚩자바 프로그램의 실행 순서

    1. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.
    2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환 시킨다.
    3. Class Loader를 통해 class 파일들을 JVM으로 로딩한다.
    4. 로딩된 class 파일들은 Execution engine을 통해 해석된다.
    5. 해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어 지게 된다.

🥕 Stack & Heap

Stack 영역

프로그램이 데이터를 저장하는 방식인 자료구조중 하나이다. 보통 LIFO라는 키워드로 많이 설명이 되는데 LIFO란 Last-in First-out을 뜻한다. 데이터가 Stack의 자료 구조형을 가진다면 데이터는 들어온 순서대로 저장되게 되고 데이터의 출력은 가장 최근 자료부터 나가게 된다. Stack영역에는 지역변수와 매개변수가 저장되며 함수의 호출과 함께 Stack Frame을 만들어 저장하게 된다. 함수의 호출이 완료되면 소멸하게 된다.

Heap 영역

메모리의 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제되는 공간이다. JVM에서 단 하나의 Heap영역이 존재하며 객체나 인스턴스 변수, 배열같은 정보가 저장된다. Java에서 실제 객체는 Heap영역에 저장되며 참조 타입 변수는 Stack 영역에 실제 객체들의 주소를 저장하게 된다. 만약 이러한 주소의 연결이 끊어지거나 객체가 사라지게 된다면 빈 주소 값들은 Garbage Collector가 청소하게 된다.

자바가상머신, JVM이란 무엇인가?

Visualizing memory management in JVM(Java, Kotlin, Scala, Groovy, Clojure)

Chapter 4. The class File Format

메모리의 구조](http://www.tcpschool.com/c/c_memory_structure)

⭐ 오늘의 소감

JVM파트를 다시 공부하게 됬다. 처음 게임을 만들 때 다들 스택이나 힙 같은 메모리 구조들을 말했었는데, 당시에는 깊게 배우는 과정도 아니였어서 그냥 넘겼었다. 자바를 어느정도 배우고 지금에 와서 다시 메모리 구조를 보니 참조변수를 관리하는 과정이 흥미로웠다. +자료구조의 Stack 과 메모리 구조의 Stack이 같은 건 줄 알았는데 둘의 차이점이 있다는 걸 강사분께 듣고 혼자 찾아봤다.

profile
매일 문제 3개 이상 풀기!!

0개의 댓글