티스토리 뷰
자바의 메모리 구조
정적 영역(Static/Method)
- 런타임 상수 풀, 멤버 변수(필드), 클래스 변수(static), 상수(final), 생성자와 메소드 등을 저장하는 공간
- JVM이 동작해서 클래스가 로딩될 때 생성
- 프로그램의 시작부터 종료가 될 때까지 메모리에 남아있게 되며 어느곳에서나 접근이 가능.
스택 영역(Stack)
- primitive 타입(int, double, long, boolean 등)의 지역변수, 매개변수 데이터 값과 참조형 데이터의 주소값을 저장하는 공간
- 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리에서 사라짐
힙 영역(Heap)
- 참조형 데이터 타입인 객체와 배열 등을 저장하는 공간
- JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당
- 메모리 호출이 끝나더라도 삭제가 되지 않고 참조가 끊어진 인스턴스를 GC(가비지 컬렉터)가 청소
Stack은 스레드마다 각각 생성되지만 Heap은 단 하나만 존재한다.
예제
힙과 스택 메모리의 차이
- 힙 메모리는 전역에서 사용되며 스택 메모리는 하나의 스레드가 실행될 때 사용된다. 그래서 힙과 메서드 공간에 저장된 객체는 어디에서든 접근이 가능!
- 객체가 생성되면 힙 영역에 저장되며 생성된 객체의 주소값을 스택 메모리(4Byte)에 저장하며 참조한다.
- 스택 메모리의 생명주기는 매우 짧으며 힙 메모리는 애플리케이션의 시작부터 끝까지 살아남는다.
- 스택 메모리 사이즈는 힙 메모리에 비해 매우 작지만 간단한 메모리 할당 방법(LIFO)을 사용하므로 힙 메모리보다 빠르다.
참고 자료
반응형
'개발냥이 > 자바(Java)' 카테고리의 다른 글
[자바] 제네릭(Generics) 이해하기 (0) | 2023.05.20 |
---|---|
[JAVA] 자바의 배열(Array) 다루기 & 객체 비교(Comparable, Comparator) (0) | 2023.04.22 |
[스프링] GenericFilterBean과 OncePerRequestFilter의 차이 (0) | 2023.01.09 |
[Spring] Lombok을 올바르게 사용하는 방법 (0) | 2023.01.05 |
[Java] Queue에 대해 살짝 알아보자 (0) | 2022.11.02 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SQLD
- SQL
- 프로그래머스
- 자바dp
- 형변환
- 자바스크립트
- 정렬
- 스프링
- 타입스크립트
- java
- 스프링부트
- BFS
- Algorithm
- Comparator
- Spring
- 알고리즘
- DP
- dfs
- 자바bfs
- JavaScript
- Nest
- 해시맵
- CS
- 자바트리
- 백준
- 자바
- 리액트
- JPA
- Queue
- 이분탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함