From 466548d8b5018bc34bcae820c7fd0fe6013a0804 Mon Sep 17 00:00:00 2001 From: Seokhee Park Date: Mon, 13 Nov 2023 14:52:50 +0900 Subject: [PATCH] Update 2023-11-06-javaGC.md --- _posts/2023-11-06-javaGC.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/_posts/2023-11-06-javaGC.md b/_posts/2023-11-06-javaGC.md index ecabb42..eefa6ab 100644 --- a/_posts/2023-11-06-javaGC.md +++ b/_posts/2023-11-06-javaGC.md @@ -22,7 +22,7 @@ tags: [java, GC, 기술세미나] 첫 블로그 글이라 기대가 되는데요, 가비지 콜렉션에 대해 함께 알아보도록 하겠습니다! -# 가비지 콜렉션이란? +## 1. 가비지 콜렉션이란? ``` #include #include @@ -56,7 +56,7 @@ void main() 자바에서는 이러한 문제를 어떻게 해결할까요? -## JVM의 메모리 관리 +## 2. JVM의 메모리 관리 프로그램을 개발하다 보면 유효하지 않은 메모리인 가비지가 발생합니다. `Java` 언어를 사용해서 개발할 때도 마찬가지이죠. @@ -93,7 +93,7 @@ JVM 메모리 영역 중 가장 큰 블록이고 가비지 콜렉션이 이루 메서드에리어는 프로그램의 클래스 구조와 메서드들의 코드를 메타데이터 같은 방식으로 저장하는 영역입니다. -## 가비지 콜렉터가 객체와 가비지를 구분하는 기준 +## 3. 가비지 콜렉터가 객체와 가비지를 구분하는 기준 가비지 콜렉터는 객체와 가비지를 구분해야 하는 역할이 있습니다. @@ -130,7 +130,7 @@ JVM 의 Heap 영역은 2가지 전제를 두고 설계 되었습니다. Young generation 영역에서 일어나는 가비지 콜렉션을 `Minor GC` , Old generation 영역에서 일어나는 가비지 콜렉션을 `Major GC` 라고 부르게 됩니다. -## Minor GC / Major GC +## 4. Minor GC / Major GC Young generation 영역은 `Eden` 영역과 `Survivor` 영역으로 나누어지는데, 에덴 영역은 새로 생성된 객체가 저장되는 영역이고 서바이버 영역은 에덴 영역에서 살아남은 객체가 저장되는 곳입니다. @@ -160,8 +160,8 @@ Sweep된 객체들의 메모리 주소가 연속되지 않기 때문에, 충분 이후 age 값이 임계값에 달하면 (default: 31) old generation 영역으로 이동합니다. 이후 이 영역도 꽉 차면 Old generation을 대상으로 발생하는 Major GC가 발생합니다. -## 다양한 자바의 가비지 컬렉션 알고리즘 -### Serial GC +## 5. 다양한 자바의 가비지 컬렉션 알고리즘 +### - Serial GC ```java java -XX:+UseSerialGC -jar Application.jar @@ -173,7 +173,7 @@ java -XX:+UseSerialGC -jar Application.jar 멀티 프로세스 환경에서는 적합하지 않으며 Garbage Collection 이 일어나는 동안 애플리케이션이 작동을 멈추는 현상을 `Stop the world` 라고 하는데요, 이 시간이 굉장히 길어지기 때문에 적합하지 않습니다. -### Parallel GC +### - Parallel GC ```java java -XX:+UseParallelGC -jar Application.jar @@ -195,7 +195,7 @@ Serial GC 와 다른점은 여러 스레드를 사용하여 동시에 수행되 대규모 서버 환경 같은 경우에 효과적으로 사용되지만, 응답 시간이 중요한 어플리케이션의 경우 다른 컬렉션 알고리즘을 재고하는 것이 좋습니다. -### CMS(Concurrent Mark Sweep) GC +### - CMS(Concurrent Mark Sweep) GC ```java java -XX:+UseConcMarkSweepGC -jar Application.jar @@ -209,7 +209,7 @@ CMS GC는 낮은 지연시간이 필요한 상황에 선호되는 알고리즘 단점으로는 다른 GC 알고리즘보다 효율적으로 컬렉션 작업이 수행되지 않으며, 메모리를 가장 많이 사용하므로 오버헤드가 발생할 수 있습니다. -### G1(Garbage First) GC +### - G1(Garbage First) GC ```java java -XX:+UseG1GC -jar Application.jar @@ -227,7 +227,7 @@ GC 동작 중 중단 시간 최소화를 위한 지연 시간 목표를 설정 올바른 성능을 얻기 위해서는 여러가지 설정 조정이 필요합니다. -## JVM 튜닝 +## 6. JVM 튜닝 마지막으로, `Spring Boot` 환경에서 JVM 튜닝을 통해 성능을 개선하는 방법을 알아보겠습니다. @@ -270,7 +270,7 @@ bootRun { 마지막으로, `-Xlog:gc*:file=logs/gc.log:time, tags:filecount=10, filesize=10M` 옵션은 GC의 로그 파일을 남기는 옵션입니다. 해당 옵션의 값에 따라 로그 파일에 나타나는 값, 최대 파일 크기, 최대 파일 개수 등이 결정됩니다. 해당 로그를 먼저 확인 후 최적의 값을 찾기 위해 값을 조절하면 되겠습니다. -## 발표를 마치며 +## 7. 발표를 마치며 우선 첫 발표라 굉장히 떨렸는데 많은 크루분들께서 발표에 집중해주시고 퀴즈도 잘 풀어주셔서 감사하다는 말을 남기고 싶습니다. 자바는 잘 관리된 언어 `Well Managed Language` 라고 합니다. 그만큼 GC는 사용자 편의와 생산성을 증가시켜주는 자바의 장점입니다. @@ -279,7 +279,7 @@ bootRun { 감사합니다. -## 참고 문헌 +## 8. 참고 문헌 [https://deepu.tech/memory-management-in-programming/](https://deepu.tech/memory-management-in-programming/)