시작이 반

[Java] JVM GC란 본문

Programming/Java

[Java] JVM GC란

G_Gi 2023. 1. 25. 17:58
SMALL

C나 C++은 OS레벨의 메모리에 직접 접근 한다. 때문에 사용자가 직접 메모리 누수를 막기 위해 메모리 해제를 해줘야 한다.

 

자바는 OS에 직접적으로 접근하지 않고 Java Virtual Machine(JVM) 이라고 하는 가상 머신을 통해서 간접적으로 접근을 하게 된다.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rbdi3222&logNo=220594436564

 

이런 JVM은 메모리를 자동으로 관리를 해주는데 이렇기 때문에 메모리 누수가 없으며 사용자가 메모리초과 이외에는 신경을 쓰지 않아도 된다는 장점을 가지고 있다.

 

그렇다면 JVM은 어떻게 메모리를 자동으로 관리를 해주는 것일까?

 

JVM에는 Garbage Collection(GC)라고 하는 것이 존재한다. 이 가비지 컬렉션은 Heap영역을 스캔하여 사용하지 않는 메모리를 제거해준다.

 

사용하고 있는지 사용하지 않고 있는지 어떻게 아는 것인가...

 

자바메모리 구조에는 Stack영역과 Heap영역이 있는데 (그 외 메소드 영역) Stack영역에서 여러 데이터가 저장이 되는데 이중 참조값도 저장이 된다 (인스턴스의 주소) 저장된 참조값을 통해 heap영역에 저장된 참조형 데이터들을 찾아가게 된다.

String url = "https://";

https://yaboong.github.io/java/2018/06/09/java-garbage-collection/

 

 

이상태에서 String 의 값을 변경하게 된다면 새로운 참조값이 할당이 된다. (String += 일경우 새로 객체가 생성됨)

url += "yaboong.github.io";

 

https://yaboong.github.io/java/2018/06/09/java-garbage-collection/

이렇게 된다면 기존 객체는 참조대상이 아니게 되는데 이를 Unreachable Object라고 한다. GC는 이러한 Unreachable Objemct를 스캔하여 제거를 해준다.

 

이러한 GC는 언제 작동이 되는걸까?

키워드 :  (Young Generations - Eden) -> (Survivor Space - From -> to) -> (Old Generation)

 

LIST

'Programming > Java' 카테고리의 다른 글

[JAVA] Java는 OS에 독립적!  (2) 2023.01.26
[Java] 2중 for문 한번에 탈출하기  (0) 2021.11.01
[Java] 코테 준비 ( 알아야할 것들)  (2) 2021.08.13
[Java] SOLID  (1) 2021.05.10
[Java] Lombok  (0) 2021.01.25