일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CSS
- Git이해하기
- 점프 투 파이썬
- 데이터베이스연동
- java기초
- Eclipse
- 파일이동버튼
- Collection
- list
- emmet
- 맨땅에 해딩
- 버튼페이지이동
- jdbc
- 필드
- 이클립스
- js
- java입문
- 컬렉션프레임워크
- object
- arraylist
- javascript
- html
- java
- form
- 기본코드
- MySQL
- Git알아보기
- 오버라이딩
- cmd
- 배열
- Today
- Total
단단히
메모리 구조 본문
메모리 구조를 이해하기 위해서는 JVM에 대해서 먼저 알아야 한다.
[ JVM이란? ]
JVM은 자바 가상 기계이다.
JAVA 프로그램은 완전한 기계어가 아니라 바이트 코드이기 때문에 바이트 코드를 해석하고 실행할 수 있는 운영체제가 따로 필요하다.
JVM은 실제 운영체제를 대신해서 JAVA를 실행하는 가상의 운영체제 역할을 한다.
운영체제(Windows, Linux, MAC) 별로 프로그램을 실행하고 관리하는 방법이 다르기 때문에 자바 프로그램을 중계하는 역할인 JVM을 이용해 여러 운영체제에서 동일한 실행 결과가 나오도록 한다.
즉, JVM으로 인해 개발자는 운영체제와 상관없이 어떤 환경이든 자바 프로그램을 개발할 수 있다.
JAVA는 운영체제에 종속적이라고 할 수 있는데, JAVA 프로그램이 운영체제가 이해하는 기계어로 번역 후 실행해야 하기 때문이다. 운영체제에 맞게 설치돼야 한다.
여러 기계어로 번역되고 실행되기 때문에 컴파일 단계에서 만들어지는 C, C++ 보다는 속도가 느리다는 단점이 있다.
그러나 최적화된 JIT 컴파일러를 통해서 속도의 격차는 줄어들고 있다.
[메서드 영역(= class 영역)]
JVM이 구동될 때 생성되고 모든 스레드가 공유하는 영역이다.
이곳은 코드에서 사용되는 클래스 (. class)들을 클래스 로더로 읽어 클래스별로 분류해서 저장한다.
[힙(Heap) 영역]
객체와 배열이 생성되는 영역이다. 이곳에 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다. 참조하는 변수나 필드가 없다면 의미 없는 객체가 된다. JVM은 쓰레기 수집기를 실행시켜 의미없는 객체(=쓰레기 객체)를 힙 영역에서 자동으로 삭제한다.
자바는 코드로 객체를 직접 제거 시키는 방법을 제공하지 않고 별도의 코드를 작성할 필요도 없다. JVM이 구동될 때 생성된다.
[JVM 스택(Stack) 영역]
각 스레드마다 하나씩 존재한다. 스택 영역은 스레드가 시작될 때 할당된다.
JAVA에서 따로 스레드를 생성하지 않았다면 main 스레드만 존재하므로 JVM 스택도 하나다.
스택은 메서드를 호출할 때 하나의 프레임을 추가(PUSH)하고 종료할 때 프레임을 제거(POP)한다.
프레임 내부에는 로컬 변수 스택이 있는데, 기본(타입) 변수와 참조(타입) 변수가 추가되거나 제거된다.
변수가 이 영역에서 생성되는 시점은 최초로 변수에 값이 저장될 때이다.
변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.
한 예시로, 제어문{} 안쪽 변수들은 안쪽에서 할 일을 하고 나면 소멸된다.
! 참조 변수는 직접 값을 가지고 있는 것이 아니라 주소를 가진다고 배웠는데, 이때 주소는 힙 영역이나 메서드 영역의 객체 주소를 의미한다.
! 자바에서는 배열을 객체로 취급한다.
'Java > 개념 정리' 카테고리의 다른 글
인터페이스 (0) | 2022.06.13 |
---|---|
클래스의 상속 _ 추상 클래스 (0) | 2022.06.10 |
클래스의 상속 (0) | 2022.05.30 |
참조 자료형, 객체, 커스텀 클래스 (0) | 2022.05.24 |
예외처리 (0) | 2022.05.22 |