| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Class
- port
- 기본은 충실히
- tcp
- HTTP
- 기초 개념 잡기
- 생성자
- URL
- 티스토리챌린지
- servlet
- heap
- URN
- 연결 리스트
- 오블완
- 을 통한 웹 브라우저 흐름
- array
- 알고리즘
- 배열
- Hashtable
- 과장님 죄송했어요
- 이진트리
- 자료구조
- URI
- 김영한님의 모든 개발자를 위한 HTTP 웹 기술 인강 꼭 들어보세요
- Stack
- HTTP메시지
- 자바
- 객체
- 인터넷 네트워크
- queue
- Today
- Total
HeadCopter
[Java] 메모리 구조 본문
자바 메모리 구조
- 모든 자바 프로그램은 자바 가상 머신(JVM)을 통해서 실행한다.
자바 프로그램이 실행되면, JVM은 운영 체제로부터 해당 프로그램을 수행할 수 있도록 필요한 메모리를 할당 받는다.
- 할당받은 메모리를 JVM은 용도에 따라 구분하여 관리한다.

메서드 영역
- 이 영역에서는 자바 프로그램에서 사용되는 클래스에 대한 정보와 함께 클래스 변수(static variable)가
저장되는 영역이다.
- JVM은 자바 프로그램에서 특정 클래스가 사용되면 해당 클래스의 클래스 파일(*.class)을 읽어들여서
해당 클래스에 대한 정보를 메소드 영역에 저장한다.
*Static ?
- 고정된 의미라는 뜻을 가지고 있는 Static으로 Java에서는 Static 변수와 Static 메서드를 만들 수 있다.
- Static을 사용한다는 의미는 모든 객체가 '공유'한다는 의미를 뜻한다.
- 모든 인스턴스가 같은 값을 공유하게 하고 싶을 때 해당 변수를 클래스의 멤버로 만들어 사용하면 된다.
Class 내부에서 Static 키워드를 해당 멤버 앞에 붙이면 클래스의 멤버가 된다.
즉, 해당 클래스 소속의 변수가 된다.
- Static은 클래스가 메모리 영역에 올라갈 때 실행이 된다. JVM이 로딩되면 클래스는 특별한 일이 발생하지 않는 이상
메모리상에서 객체를 생성할 수 있도록 메모리에 대기하고 , static은 객체의 생성과는 관계없이 클래스가 JVM을 통해
로딩되는 시점에 한번의 필요한 동작을 처리하기 위해 사용된다.
- 이런점을 이용하여 항상 값이 변하지 않는 경우 Static을 사용하면 메모리 자원에 대한 이점을 얻을 수 있다.
Stack ?
- 스택 영역은 자바 프로그램에서 메서드가 호출될 때 메서드의 스택 프레임이 저장되는 영역이다.
- JVM은 자바 프로그램에서 메서드가 호출되면 , 메서드의 호출과 관계되는 지역 변수와 매개변수를 Stack 영역에 저장한다. 이렇게 Stack영역은 메서드의 호출과 함께 할당되며 메서드의 호출이 완료되면 소멸한다.
- Stack 영역은 push 로 데이터를 저장하고 , pop 으로 데이터를 꺼낸다.
- LIFO(Last-In First_Out) 후입선출 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 꺼내진다.
Heap ?
- heap 영역은 자바 프로그램에서 사용되는 모든 인스턴스 변수가 저장되는 영역이다.
- JVM은 자바 프로그램에서 new 연산자를 사용하여 인스턴스가 생성되면, 해당 인스턴스의 정보는 heap 영역에 저장된다.
공부를 마치며....
자바 메모리 구조에 대하여 오늘 조사했고 개념을 공부하였는데 아무래도 이 부분에 대해서는
더 공부하고 디테일하게 알면 좋을거 같다는 생각을 하였다. 그래서 다음번에는 JVM이 동작할 때
어떻게 각 메모리 영역을 할당하고 어떤 일을 수행하는지 정리해서 올려봐야겠다.
'Java' 카테고리의 다른 글
| Java 클래스 만들기(1) (0) | 2024.06.18 |
|---|---|
| Spring 개념 정리(1) (0) | 2023.02.07 |
| Class와 객체(Object) 개념 (0) | 2022.07.27 |
| [Java]생성자 (Constructor) (0) | 2022.07.25 |