Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- springboot
- 4-way-handshake
- 날짜쿼리
- try-with-resources
- 코딩테스트
- feign
- wagon-ssh
- zipWith
- AutoCloseable
- intelij
- 람다표현식
- optional
- jvm
- n+1
- GC
- jetbrain
- closeable
- circuitbreaker
- try-catch-finally
- 동작방식
- resilience4j
- Class Loader
- try-catch
- webflux
- tcp
- Hotspot VM
- java
- Kotlin
- execution engine
- Runtime data area
Archives
- Today
- Total
JuBin's personal study blog
[JVM] JVM의 Memory영역 ( Stack & Heap&Static ) 본문
반응형
Stack 영역
- Heap영역에 생성된 Object값의 참조값들을 할당
- 크기가 정해져있다. ex) int는 4byte
- 원시타입(byte, short, int, long, double, float, boolean, char)값들의 데이터들이 할당(참조값 X, 실제값 저장)
- 메소드가 호출될때 메모리에 할당되고, 종료되면 메모리에서 해제
- LIFO(Last In First Out)구조
- Thread당 하나의 Stack영역 생성(Thread간 공유 불가능)
- 여는 중괄호 '{'를 만날 때 마다 스택 프레임이 하나씩 생기고, 닫는 중괄호 '}'를 만나게 되면 스택 프레임이 사라집니다. 그러므로 메소드가 실행될 뿐 만 아니라, if문, 반복문, 예외처리를 위한 try문 등도 모두 스택프레임이 생기게 됩니다.
- stack 내부에서 선언된 지역변수는 stack 영역에 올라갑니다.
- 쓰레드도 stack 영역에 생기게 됩니다. 하나의 쓰레드는 내부적으로 별개의 T메모리 구조 static, stack, heap영역을 갖게 됩니다. 이런 이유로 하나의 쓰레드는 다른 쓰레드로 접근 할 수 없지만, static 영역과 heap 영역은 공유해서 사용 할 수있는 특징을 가지게 됩니다. (이런 특징이 멀티 프로레스 구조보다 멀티 쓰레드 구조가 메모리를 적게 사용 할 수 있는 이유입니다.)
Heap 영역
- 생성된 객체(인스턴스)들이 올라간다
- 애플리케이션의 모든 메모리 중 stack 에 있는 데이터를 제외한 대부분이라고 보면 된다.
- 모든 Object 타입(Integer, String, ArrayList, ...)은 heap 영역에 생성된다.
- 몇개의 스레드가 존재하든 상관없이 단 하나의 heap 영역만 존재한다.
- Heap 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수가 Stack에 올라가게 된다
Static 영역(Method 영역이라고도 불림)
- 패키지나 클래스 정보가 올라갑니다.
- 패키지나 클래스는 프로그램 시작과 동시에 모두 올라가는 것이 아니라, 실제로 호출 될 때 올라가게 됩니다. (JVM은 영리합니다.)
- static이라는 키워드를 붙여서 선언된 필드와 메소드인 '클래스 멤버'도 static 영역에 올라갑니다. static 영역에 있는 것은 어떤 곳에서나 접근이 가능해지기 떄문에 '전역'이라는 키워드를 사용합니다.(정적변수(static)와 전역변수가 저장되는 공간이다)
- 그러므로, static (전역) 변수는 읽기 전용이 아닌 경우에는 가능한 사용하지 말아야 합니다. (누구나 접근해서 값을 수정하면 혼란을 가져 올 수 있기 때문)
- class영역 혹은 method 영역 이라고도 불립니다.
- static 영역에 자리잡게되면 JVM이 종료 될 때까지 사라지지 않고, 고정된(static) 상태로 유지됩니다.
- JVM당 단 하나의 영역이며, 공유 자원이다.
반응형
'JAVA' 카테고리의 다른 글
Maven Wrapper란(mvnw) (0) | 2021.01.05 |
---|---|
[Java] ObjectMapper란 (0) | 2020.12.23 |
서버 기반 인증 -> token 기반 인증 (0) | 2020.10.31 |
자바1.8 Stream API 정리 (0) | 2020.09.20 |
[JAVA 8] 자바1.8 Optional이란? (0) | 2020.09.20 |