Skip to content

Commit

Permalink
Update 2023-11-06-javaGC.md
Browse files Browse the repository at this point in the history
  • Loading branch information
stoneHee99 authored Nov 13, 2023
1 parent 28280fd commit 466548d
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions _posts/2023-11-06-javaGC.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ tags: [java, GC, 기술세미나]

첫 블로그 글이라 기대가 되는데요, 가비지 콜렉션에 대해 함께 알아보도록 하겠습니다!

# 가비지 콜렉션이란?
## 1. 가비지 콜렉션이란?
```
#include <stdio.h>
#include <stdlib.h>
Expand Down Expand Up @@ -56,7 +56,7 @@ void main()

자바에서는 이러한 문제를 어떻게 해결할까요?

## JVM의 메모리 관리
## 2. JVM의 메모리 관리
프로그램을 개발하다 보면 유효하지 않은 메모리인 가비지가 발생합니다.

`Java` 언어를 사용해서 개발할 때도 마찬가지이죠.
Expand Down Expand Up @@ -93,7 +93,7 @@ JVM 메모리 영역 중 가장 큰 블록이고 가비지 콜렉션이 이루

메서드에리어는 프로그램의 클래스 구조와 메서드들의 코드를 메타데이터 같은 방식으로 저장하는 영역입니다.

## 가비지 콜렉터가 객체와 가비지를 구분하는 기준
## 3. 가비지 콜렉터가 객체와 가비지를 구분하는 기준

가비지 콜렉터는 객체와 가비지를 구분해야 하는 역할이 있습니다.

Expand Down Expand Up @@ -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` 영역으로 나누어지는데, 에덴 영역은 새로 생성된 객체가 저장되는 영역이고 서바이버 영역은 에덴 영역에서 살아남은 객체가 저장되는 곳입니다.

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -195,7 +195,7 @@ Serial GC 와 다른점은 여러 스레드를 사용하여 동시에 수행되

대규모 서버 환경 같은 경우에 효과적으로 사용되지만, 응답 시간이 중요한 어플리케이션의 경우 다른 컬렉션 알고리즘을 재고하는 것이 좋습니다.

### CMS(Concurrent Mark Sweep) GC
### - CMS(Concurrent Mark Sweep) GC

```java
java -XX:+UseConcMarkSweepGC -jar Application.jar
Expand All @@ -209,7 +209,7 @@ CMS GC는 낮은 지연시간이 필요한 상황에 선호되는 알고리즘

단점으로는 다른 GC 알고리즘보다 효율적으로 컬렉션 작업이 수행되지 않으며, 메모리를 가장 많이 사용하므로 오버헤드가 발생할 수 있습니다.

### G1(Garbage First) GC
### - G1(Garbage First) GC

```java
java -XX:+UseG1GC -jar Application.jar
Expand All @@ -227,7 +227,7 @@ GC 동작 중 중단 시간 최소화를 위한 지연 시간 목표를 설정

올바른 성능을 얻기 위해서는 여러가지 설정 조정이 필요합니다.

## JVM 튜닝
## 6. JVM 튜닝

마지막으로, `Spring Boot` 환경에서 JVM 튜닝을 통해 성능을 개선하는 방법을 알아보겠습니다.

Expand Down Expand Up @@ -270,7 +270,7 @@ bootRun {

마지막으로, `-Xlog:gc*:file=logs/gc.log:time, tags:filecount=10, filesize=10M` 옵션은 GC의 로그 파일을 남기는 옵션입니다. 해당 옵션의 값에 따라 로그 파일에 나타나는 값, 최대 파일 크기, 최대 파일 개수 등이 결정됩니다. 해당 로그를 먼저 확인 후 최적의 값을 찾기 위해 값을 조절하면 되겠습니다.

## 발표를 마치며
## 7. 발표를 마치며
우선 첫 발표라 굉장히 떨렸는데 많은 크루분들께서 발표에 집중해주시고 퀴즈도 잘 풀어주셔서 감사하다는 말을 남기고 싶습니다.

자바는 잘 관리된 언어 `Well Managed Language` 라고 합니다. 그만큼 GC는 사용자 편의와 생산성을 증가시켜주는 자바의 장점입니다.
Expand All @@ -279,7 +279,7 @@ bootRun {

감사합니다.

## 참고 문헌
## 8. 참고 문헌

[https://deepu.tech/memory-management-in-programming/](https://deepu.tech/memory-management-in-programming/)

Expand Down

0 comments on commit 466548d

Please sign in to comment.