본문 바로가기

Backend/JVM7

가비지 컬렉션(Garbage Collection, GC)의 알고리즘 https://hyeri-dev.tistory.com/16 가비지 컬렉션(Garbage Collection, GC)의 작동 원리 https://hyeri-dev.tistory.com/12 가비지 컬렉션(Garbage Collection, GC)의 개념 가비지 컬렉션(Garbage Collection, GC) 이란? 가비지 컬렉션(Garbage Collection, GC) Java의 메모리 관리 기법으로 애플리케이션이 동적으로 hyeri-dev.tistory.com 이전 포스팅에서 GC를 실행하기 위해서는 JVM GC 관련이 아닌 스레드는 실행을 멈추게 하여 Stop The World(이하 STW)가 발생한다고 하였다. 이 STW 때문에 어플리케이션이 중지되는 문제가 발생할 수 있었고 자바의 발전됨에 따라.. 2023. 9. 12.
가비지 컬렉션(Garbage Collection, GC)의 작동 원리 https://hyeri-dev.tistory.com/12 가비지 컬렉션(Garbage Collection, GC)의 개념 가비지 컬렉션(Garbage Collection, GC) 이란? 가비지 컬렉션(Garbage Collection, GC) Java의 메모리 관리 기법으로 애플리케이션이 동적으로 할당했던 메모리 영역 중 더이상 사용하지 않는 영역을 정리하는 hyeri-dev.tistory.com 가비지 컬렉션(GC)의 수거 대상을 참조 되고 있거나, 그렇지 않은 상태를 구분하여 주기적으로 제거한다고 했다. 그럼 어떠한 방식으로 가비지 컬렉션이 작동되고 있는걸까? GC 동작 방식 Mark And Sweep Mark-Sweep이란 자바, 자바 스크립트에서 사용되는 GC 알고리즘으로 루트에서부터 해당 객체.. 2023. 9. 11.
JVM 힙(Heap) 영역 Heap 영역의 변화 Java 7 JVM의 Heap 영역과 Java 8 JVM의 Heap 영역의 가장 큰 차이 점은 Permanent Generation이 사라지고 Metaspace 영역이 생겨난 것이다. 공통점 로드되는 클래스, 메서드 등에 관한 메타 정보를 저장한다. 리플렉션 클래스 로드 시 사용된다. 차이점 Permanent Generation Metaspace Default 크기 제한된 고정 크기 자동 확장 가능(고정 X) 속하는 영역 Heap 영역 Native Memory 영역 이처럼 Metaspace 영역은 JVM에 의해 관리되는 Heap영역이 아닌 OS 레벨에서 관리되는 Native Memory 영역을 이용함으로서 개발자는 영역 확보의 상한을 크게 의식하며 개발하지 않아도 된다는 장점을 가진.. 2023. 9. 8.
가비지 컬렉션(Garbage Collection, GC)의 개념 가비지 컬렉션(Garbage Collection, GC) 이란? 가비지 컬렉션(Garbage Collection, GC) Java의 메모리 관리 기법으로 애플리케이션이 동적으로 할당했던 메모리 영역 중 더이상 사용하지 않는 영역을 정리하는 기능을 한다. Heap 메모리에서 활동하며 JVM에서 가비지 컬렉터(Garbage Collector)의 스케줄링을 담당한다. 개발자가 따로 메모리를 관리하지 않아도 되므로, 메모리 누수와 같은 문제를 방지하고 개발에만 집중할 수 있도록 한다. 가비지 컬렉터(Garbage Collector) 가비지(Garbage) : 앞으로 사용되지 않는 객체의 메모리 더이상 참조되지 않는 메모리 객체(가비지)를 모아 정해진 스케줄에 의해 관리(제거)하는 역할을 수행한다. 일반적으로 자.. 2023. 9. 1.
JVM 동작 방식 및 메모리 구조(2) JVM의 동작 방식 및 구조 자바 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당받는다. 자바 컴파일러(Javac)가 자바 소스코드(. java)를 자바 바이트 코드(. class)로 컴파일한다. Class Loader는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data Area에 올린다. Runtime Data Area에 로딩된 바이트 코드는 Execution Engine을 통해 해석된다. 이 과정에서 Execution Engine에 의해 Garbage Collector의 작동과 Thread 동기화가 이루어진다. 💡Runtime Data Area는 실직적인 메모리를 할당받아 관리하는 영역. JVM의 역할은 Java 애플리케이션을 클래스 로더를 통해 읽어 Java API와.. 2023. 8. 31.
JVM 동작 방식 및 메모리 구조(1) JVM 동작 방식 개발자가 소스 코드(.java) 파일을 작성하여 실행하면 Javac(Java Complier)에 의해 바이트 코드(.class)로 변환된다. 💡 소스 코드를 바이트 코드로 변경하는 이유 1. 작성한 코드를 1차적으로 숨기기 위해 2. 컴파일 이후에는 문법 검사를 하지 않도록하여 시간을 단축하기 위해 위 방식은 소스 코드를 변경할 때마다 컴파일하고 실행 시켜야 하기 때문에 시간이 많이 걸린다는 단점을 가진다. Javac에 의해 변환된 Class 파일은 lass Loader가 JVM의 메모리 영역(Runtime Data Area)으로 로딩시킨다. JVM의 메모리 영역(Runtime Data Area) JVM의 메모리 영역는 자바 애플리케이션을 실행할 때 사용되는 데이터를 적재하는 영역으로 .. 2023. 8. 30.