GC (Garbage Collection) 이란 ?
- 안 쓰는 메모리를 알아서 정리해준다.
그건 어떤 메모리인가요?
- Null 선언된, 가리키는 주소(참조)가 없어진 객체.
실행되는 과정
- Stop The World
- 가비지 컬렉션이 동작하기 위해 JVM이 애플리케이션 실행을 멈춘다.
- GC 실행 쓰레드를 제외한 모든 쓰레드가 작업을 중지한다.
- Mark And Sweep
- Mark : 사용되지 않는 메모리를 식별한다.
- Sweep : 식별한 메모리를 제거한다.
특징
- Java는 GC가 직접 메모리 관리를 해줘서 편리하다
- 다만 GC가 따로 돌아가는 과정이 추가돼서 좀 느리다.
*그래서 게임 서버 같은 경우는 직접 메모리를 해제하는 C/C++ 등의 언어를 사용한다.
JVM (Java Virtual Machine) 이란 ?
- JVM 은 OS 위에 돌아가며, 자바 프로그램을 OS 에 상관없이 동작하게 해준다.
- 프로그램 메모리를 관리하고 최적화해준다.
단점
- 일반 애플리케이션 코드는 OS → 하드웨어
- JAVA 는 JVM → OS → 하드웨어
- 게다가 실행시에 해석되기 때문에 속도가 좀 느리다.
JVM 의 메모리 구조
Method Area (Static)
- 클래스, static 변수, method, 상수 정보 등이 저장되는 영역
Stack Area
- 각 쓰레드마다 하나씩 생성된다. 선입후출.
- 실행되는 메서드가 하나씩 쌓인다. 그래서 지역변수도 여기에 저장된다. 실행이 종료되면 사라진다.
Stack Area
- new 명령어로 생성된 객체들이 저장된다. 그래서 인스턴수 변수도 여기에 저장된다.
- 여기에 저장되는 메모리들이 GC 로 지워지는 메모리들이라고 보면 된다.
그 외
PC Register
- JVM 의 주소 값이 저장된다.
Native Method Stack
- 다른 언어의 메서드 호출을 위해 할당된다. (C/C++ 등)
- 그 구역 언어에 맞게 Stack이 형성된다.
JAVA의 실행 과정
- .java 파일을 컴파일러가 .class 파일로 만든다. 소스 코드를 java 바이트 코드로 변경하는 것이다.
- 클래스 로더가 JVM 내로 class 파일들을 load 한다.
- Java 바이트 코드를 JVM이 읽고 실행한다.
자바 바이트 코드 ?
- JVM이 이해할 수 있게 변환 된 자바 소스 코드
728x90
'개발공부 개발새발 > JAVA' 카테고리의 다른 글
JAVA ) List.size() == 0 일 때, forEach 를 사용해도 예외가 발생하지 않을까? (0) | 2024.01.10 |
---|---|
Hello, Java 21 ! (0) | 2023.09.23 |
Junit5 Test ) Controller 를 테스트 해보자! (0) | 2023.07.01 |
Junit5 Test ) Service 를 테스트 해보자! (0) | 2023.07.01 |
JpaRepository 를 사용하는 클래스를 테스트를 하고 싶어요! (0) | 2023.05.31 |