일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JavaScript
- 백준
- 스택
- Collection
- JDBC
- javscript
- Java
- solid
- 디자인패턴
- lambda calculus
- Spring
- tcp
- 자바
- 파이썬
- functional programming
- 큐
- 프로그래머스
- Pattern
- Network
- Collections
- 로버트마틴
- Eclipse
- Rails
- 함수형 프로그래밍
- DesignPattern
- 람다 칼큘러스
- Python
- design-pattern
- 겨울카카오인턴
- exception
Archives
- Today
- Total
개발자 노트
자바 메모리 구조 본문
자바로 프로젝트를 진행하며 객체 관리가 어떻게 되는지 감이 안잡혀서 메모리 구조 기초 지식을 쌓아보고자 한다.
출처 :
https://www.geeksforgeeks.org/java-memory-management/
https://d2.naver.com/helloworld/1329
자바 메모리 구조
왜 Java Memory Management를 배워야 하는가?
JVM이 관리하지 않는 object에 의해 crash발생 가능.
더 나은 성능을 가진 app을 만들 수 있음.
Java Memory Structure
JVM(Java Virtual Machine)
- jvm은 runtime data area를 결정한다.
- 메모리는 thread에 의해, jvm에 의해 할당될 수 있으나 jvm에 의해 할당된 메모리는 반드시 jvm이 해제 시켜주어야 한다.
JavaMemory Area Parts
앞으로 5개의 메모리 영역에 대해 설명한다. 이때 관심있게 봐야할 부분은
- 언제 area가 생성되는가
- 이 영역에 gc가 발생하는가?
- 언제 gc가 발생하는지
- 어떤 데이터들이 할당되는지
- 메모리 사이즈가 동적-정적 할당 되는지
Heap area
- runtime data area가 공유된다
- 실제 object가 저장된다.(reference가 아님. 변수명같은 것이 아니란 뜻)
-
sc는 stack 영역에, Scanner Class 객체는 heap 영역에 저장된다.Scanner sc = new Scanner(System.in);
-
- 메모리 사이즈는 시스템 설정에 따라 동적-정적으로 정해진다. 그리고 유저가 변경할 수 있도록 제어권을 줌.
- 따라서 heap 영역에 대해 GC는 반드시 수행되어야 함.
Method Area
- Heap area의 논리적인 부분.
- jvm이 실행될 때 생성된다.
- 이 영역에 할당되는 데이터 종류는 다음과 같다.
- class structres
- method data
- constructor field data
- interfaces
- special method (used in class)
- 메모리 사이즈는 계산에 따라 고정될 수도, 커질 수도 있다.(expended)
- 인접할 필요는 없다. (Needs not to be contiguous).
- (무슨 뜻?) -> 아마 논리적인 메모리 부분에서 메모리 주소가 반드시 인접하도록 데이터를 놓아줄 필요가 없다는 뜻 같다.
- 비록 Heap 영역의 논리적인 부분이나, GC를 할수도 안할 수도 있다.
JVM Stacks
- thread가 생성될 때 생성된다.
- 중간 결과나 데이터를 담을 때 사용된다. 즉, 운영체제에서 사용하는 stack처럼 사용되는 메모리 공간이다.
- stack 메모리의 크기는 정적-동적 선택가능. stack이 생성될 때 다른 stack과 독립적으로 설정가능하다.
- 인접할 필요는 없다 (Needs not to be contiguous)
Native method Stacks
- C stack이라고도 부른다.
- C언어의 C라 보면 된다.
- Java language로 작성되어 있지 않은 부분.
- thread가 생성될 때 각 thread에게 할당.
- 정적-동적일 수 있음
Program counter register
- 특정한 메소드를 수행하고 있는 각 JVM thread는 이 메소드와 관련된 pc register를 가지게 된다.
- non native methods는 JVM instruction 주소를 이 영역에 저장한다.
- non native methods는 pc가 정해지지 않는다.(undefined)
- PC register는 return address나 특정 플랫폼의 native pointer를 저장할 수 있다.
Working of a Garbage Collector
- JVM이 이 프로세스를 작동시킨다.
- age기법을 통해 objects를 그룹화한다.
- age는 object가 얼마나 많은 clock cycle동안 살아남는가로 결정.
- System.gc()나 Runtime.gc()는 JVM에게 GC를 요청하는 것이다. 하지만! 결국 결정은 JVM이 하기 때문에 GC를 하지 않을 수 있다.
- 이 명령어는 사용하지 않도록 한다. GC가 발생할 때 stop-the-world라고 시스템이 멈추기 때문에 하지 않도록 한다.
- 출처 : https://d2.naver.com/helloworld/1329
반응형
'컴퓨터 언어 > Java' 카테고리의 다른 글
Collection 정리 (0) | 2022.06.30 |
---|---|
Exception (0) | 2020.11.08 |
[eclipse]java version 14이용 문제 (0) | 2020.04.22 |
Generic (0) | 2020.04.16 |
enum에 대하여 (0) | 2020.04.16 |
Comments