| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 메모리에서 배열
- Google Java Style Guide
- 세션장점
- 우아한테크코스 Google Java Style Guid
- GPT프로젝트
- session이뭔가요?
- 신입개발자 프로젝트
- jwt토큰구조
- jwt토큰관리
- jwt토큰원리
- 프록시서버
- jwt란?
- session장점
- Google Java Code Style Guide
- ReverseProxy
- 세션단점
- 세션장단점
- session이 뭔가요?
- 배열과 메모리
- 토큰구조
- 백엔드 서버
- 구글 자바 스타일
- 구글 자바 코드 스타일
- 프로그래밍 배열
- session이란?
- jwt원리
- 포워드프록시
- session단점
- 자바 코드 가이드
- 신입개발자
- Today
- Total
dev_dbdb1114
[JAVA] HEAP영역과 STACK영역 Unreachable Object 본문
비전공자에 프로그래밍을 배운지 1년 남짓한 요즘 이런 단어들 조차 어렵다.
혹시 나와 같은 사람들이 있을까 싶어 글을 올린다.
public class Date01 {
public static void main(String[] args) {
int a = 0;
String str = "자바";
}
}
위 코드를 실행한다면, HEAP영역과 STACK영역에 어떻게 저장되는지 살펴보자.
가장 먼저

위와 같이 HEAP영역에는 영향없이 STACK에만 저장될 것이다.
어떤 것이 STACK에 저장되고 어떤 것이 HEAP에 저장될까?
원시형 데이터타입인 int, float, double, char, boolean 등 원시형 데이터타입은
모두 HEAP에는 저장되지 않고 STACK영역에 저장된다.
자연스럽게 추론할 수 있는 것은 우리가 아는 데이터 타입은 크게 보면 두 가지다.
원시형 데이터타입과 참조형 데이터타입 원시형 데이터타입은 STACK에 저장된다고 했으니
당연히 나머지는 HEAP에 저장될 것이다. 다만 형태가 STACK과 다르다.
참조형 변수인 String 값을 초기화한다면 아래와 같은 구조가 된다.

STACK에는 흔히 우리가 말하는 변수가 있고 해당 변수는 HEAP영역에 우리가 저장한 값을 가리키고 있다.
우리가 원시타입 변수나 참조형 변수(배열, String, 사용자정의타입)를 선언하고 초기화할 때 위 그림과 같은 일이 일어난다.
우리가 참조형 변수 str을 다른 값으로 바꾸면 어떻게 될까?
예를 들어 str = "바꾼거" 라고 코드를 작성하면
str = "바꾼거";

그리고 이렇게 된 원래의 참조 값인 String "자바" 는 unreachable object라고 하며, 이러한 unreachable object를 GC가 처리한다.
아래 GC관련 포스팅된 블로그를 참조했다. 정말 설명 잘해놓으셨다. 리스펙.,,,
https://yaboong.github.io/java/2018/05/26/java-memory-management/
'프로그래밍 > JAVA' 카테고리의 다른 글
| [JAVA]JVM해체기(2) - 클래스 로더 ( 동작 방식 ) (0) | 2023.01.16 |
|---|---|
| [JAVA]JVM 해체기(1) (0) | 2023.01.12 |
| [JAVA] 가비지컬렉터2 - 동작방식 (0) | 2022.12.08 |
| [JAVA] 가비지컬렉터 - Heap 영역 (0) | 2022.12.08 |
| [JAVA] inner클래스 (정적 / 비정적) (0) | 2022.12.02 |