JVM 메모리 구조
- Method Area(메서드 영역)
- JVM이 실행되면서 생기는 공간
- 클래스 멤버 변수, 메서드, 데이터타입 등에 대한 정보, 전역 변수 정보, static 변수 정보 등이 저장
- 모든 스레드에서 공유되는 공간
- Heap Area(힙 영역)
- new 연산자로 생성된 객체 등 동적으로 생성된 데이터가 저장되는 공간
- 자동 소멸되지 않아 Garbage Collector가 주기적으로 제거
- 모든 스레드에서 공유되는 공간
- Stack Area(스택 영역)
- 지역 변수, 파라미터, 리턴 값, 매개변수 등과 같이 잠시 사용되고 필요 없어지는 데이터가 저장되는 공간
- 스레드마다 하나씩 존재
- PC Register(PC 레지스터)
- 스레드가 생성되면서 생기는 공간
- 스레드가 어느 명령어를 처리하고 있는 지 그 주소와 명령을 저장
- JVM이 실행하고 있는 현재 위치 안내
- 스레드마다 하나씩 존재
- Native Method Stack
- 자바 이외 다른 언어(C, C++등)로 작성된 네이티브 코드를 실행할 때 사용되는 메모리 영역 (변환된 자바 바이트 코드로 해석)
- 스레드마다 하나씩 존재
JVM 구조, 동작 방식
- JVM은 스택 기반으로 동작하며, Java Byte Code를 OS에 맞게 해석 해주는 역할을 하고 가비지컬렉션을 통해 자동적인 메모리 관리
- Class Loader: JVM내로 class를 로드하고 Link를 통해 적절히 배치하는 일련의 작업을 수행
- Execution Engine: class loader를 통해 JVM 내의 런타임 데이터 영역에 배치된 바이트 코드는 실행 엔진에 의해 실행, 실행 엔진은 자바 바이트 코드를 명령어 단위로 읽어서 실행
- Garbage Collector: JVM은 Garbage Collector를 통해 자동화된 메모리 관리 기능
- Runtime Data Areas: JVM이라는 프로그램이 운영체제 위에서 실행되면서 할당받는 메모리 영역
- 동작 방식
- 개발자가 .java 파일을 생성한다.
- build를 한다.
- java compiler의 javac의 명령어를 통해 바이트코드(.class)를 생성한다.
- Class Loader를 통해 JVM 메모리 내로 로드한다.
- 실행엔진을 통해 컴퓨터가 읽을 수 있는 기계어로 해석된다.
Garbage Collection(GC)
- JVM의 메모리 관리 기법 중 하나로 시스템에서 동적으로 할당됐던 메모리 영역 중에서 필요없어진 메모리 영역을 회수하여 메모리를 관리해주는 기법
- GC의 작업을 수행하기 위해 JVM이 어플리케이션의 실행을 잠시 멈추고, GC를 실행하는 쓰레드를 제외한 모든 쓰레드들의 작업을 중단 후 (Stop The World 과정) 사용하지 않는 메모리를 제거(Mark and Sweep 과정)하고 작업이 재개
-
- 객체가 새롭게 생성되면 Young 영역 중에서도 Eden 영역에 할당 (그 중 Eden영역)Minor GC
- 새로 생성된 객체가 Eden 영역에 할당된다.
- 객체가 계속 생성되어 Eden 영역이 꽉차게 되고 Minor GC가 실행된다.
- Eden 영역에서 사용되지 않는 객체의 메모리가 해제된다.
- Eden 영역에서 살아남은 객체는 1개의 Survivor 영역으로 이동된다.
- 1~2번의 과정이 반복되다가 Survivor 영역이 가득 차게 되면 Survivor 영역의 살아남은 객체를 다른 Survivor 영역으로 이동시킨다.(1개의 Survivor 영역은 반드시 빈 상태가 된다.)
- 이러한 과정을 반복하여 계속해서 살아남은 객체는 Old 영역으로 이동(Promotion)된다.
- Major GC
- Young 영역에서 오래 살아남은 객체는 Old 영역으로 Promotion됨. 그리고 Major GC는 객체들이 계속 Promotion되어 Old 영역의 메모리가 부족해지면 발생
- Young 영역은 일반적으로 Old 영역보다 크키가 작기 때문에 애플리케이션에 크게 영향을 주지 않지만 Old 영역은 Young 영역보다 크며 Young 영역을 참조할 수도 있기 때문에 일반적으로 Minor GC보다 시간이 오래걸림
Overriding(오버라이딩) VS Overloading(오버로딩)
- 오버라이딩: 하위 클래스에서 상위 클래스의 메서드를 재정의 하는 것 (같은 이름)
- 오버로딩: 두 메서드가 같은 이름을 갖고 인자의 수나 자료형이 다른 경우
- 메서드 이름이 같아도 매개변수 선언이 다르면 호출된 메서드를 구분할 수 있다
List, Set, Map
- List
- 데이터를 순차적으로 저장
- 데이터 중복을 허용
- 데이터로 NULL 허용
- Set
- 순서없이 Key로만 데이터 저장
- Key 중복 허용 X
- Key로 NULL 허용 X
- Map
- 순서없이 Key, Value로 데이터 저장
- Value는 중복 허용, Key는 중복 허용 X
- Key로 NULL 허용 X
'🎈 > 면접 준비' 카테고리의 다른 글
[기술 면접] JAVA (1) (3) | 2024.11.15 |
---|---|
[Oracle] 계층형 쿼리 (0) | 2024.11.12 |
[기술 면접] 자료구조, 알고리즘 (0) | 2024.11.10 |
[기술 면접] 데이터 베이스 (6) | 2024.11.09 |
[기술 면접] 네트워크 (2) | 2024.11.07 |