일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BufferedReader
- SQL
- 형변환
- 프론트엔드
- 자바
- sql문
- 정보처리기사
- DML
- JavaScript
- 웹개발
- scanner
- 예외처리
- select문
- 메서드
- 개발자
- 리눅스
- 프로그래밍
- github
- 백준
- String클래스
- StringBuilder
- Java
- 데이터 조회
- 클래스
- 백엔드
- 프로그래머스 SQL
- Git
- 알고리즘
- 스프링
- where
- MySQL
- Linux
- html
- mybatis
- 프로그래머스 sql 고득점 kit
- order by
- 정보처리기사필기요약
- select
- 입출력
- 자바스크립트
- Today
- Total
ToBe끝판왕
[ JAVA ] JVM 정의 및 메모리 사용 영역 본문
JVM
▶ 정의
자바가상기계 ( Java virtual Machine ) 으로 바이트코드 파일을 운영체제를 위한 완전한 기계어로 변역하고 실행하는 역할
▶ JVM의 구성
1) 자바 인터프리터
자바 바이트 코드를 읽고 해석하는 역할
2) 클래스 로더
자바는 동적으로 클래스를 읽어오므로 프로그램이 실행중인 런타임( Runtime ) 이 되어야 모든 코드가 JVM과 연결된다.
3) JIT 컴파일러
프로그램이 실행중인 런타임( Runtime )때 실제 기계어로 변환해주는 컴파일러
4) 가비지 컬렉터
더는 사용하지 않는 메모리를 자동으로 회수해주는 역할 ( 개발자는 따로 메모리 관리 필요 X )
※ 바이트코드 파일 ?
자바가성머신( JVM )이 이해할 수 있는 언어로 변환된 자바 소스 코드
변환되는 코드의 명령어 크기가 1byte라서 자바 바이트코드라고 부른다.
자바 바이트코드의 확장자는 .class 이고 JVM만 설치되어 있으면 어떤 운영체제에서도 실행이 가능하다.
▶ JVM의 메모리 사용 영역
1) 스태틱( static ) 영역
• 패키지나 클래스 정보( 클래스 데이터 ) 가 올라간다.
- 패키지나 클래스는 실제로 호출될 때, 올라가게 된다.
• static 영역에 있는것은 어떤 곳에서나 접근이 가능해지기 때문에, "전역"이라는 키워드를 사용
• static 변수는 읽기 전용이 아닌 경우에는 가능한 사용하지 X
• class 영역 / method 영역이라고도 불린다.
• static 영역에 자리잡으면 JVM이 종료될 때까지 사라지지 않고, 고정된( static ) 상태로 유지
• 필드 부분에서 선언된 전역변수, static 키워드가 붙은 자료형 혹은 메서드
2) 스택( stack ) 영역
• 중괄호 { 를 만날때 마다 스택 프레임이 하나씩 생기고, 닫는 중괄호 } 를 만나게 되면 스택프레임이 사라진다.
- 메서드가 실행될 뿐 아니라, if문 , 반복문, 예외처리를 위한 try문 등 모두 스택 프레임이 생김
• stack 내부에서 선언된 지역변수는 stack 영역에 올라간다.
• 기본형 타입 변수값들은 stack 영역에 저장되고, 참조형 타입 변수는 참조값만 저장됨
• 메서드를 호출하는 것은 별개의 스택프레임이기 때문에 스택프레임을 넘어서 접근 불가능
• 쓰레드( thread )도 스택영역에 생기게 된다.
- 하나의 쓰레드는 내부적으로 별개의 T메모리구조( static, stack, heap )영역을 가지게 된다.
- 하나의 쓰레드는 다른 쓰레드로 접근 할수 없지만, static 영역과 heap 영역은 공유해서 사용이 가능하다.
• main()을 포함한 각 메서드의 호출시 생성되는 지역변수와 매개변수
- 메서드 실행이 완료되면 스택에서 제거됨
3) 힙( heap ) 영역
• 생성된 객체( 인스턴스 ) 들이 올라간다.
• 인스턴스 필드들은 heap 영역에 올라간다.
• 어떤 참조변수도 heap 영역의 인스턴스를 참조하지 않게 된다면, 가비지컬렉터에 의해 메모리에서 사라지게 된다.
• 상속을 이용한 인스턴스를 만들었다면, 상위 클래스들의 인스턴스들도 같이 생성
( 최상위 object 까지 )
• new 연산자를 이용해서 메모리를 할당하는 것 ( heap에 할당 )
• 객체와 배열이 생성되는 공간 / 참조타입( 배열, 열거, 클래스, 인터페이스 )들을 힙영역에 주소형식으로 저장
'■ 프로그래밍 SKILLS > JAVA' 카테고리의 다른 글
[ JAVA ] 상속 (0) | 2022.05.23 |
---|---|
[ JAVA ] 인스턴스 멤버 , 정적 멤버 , 싱글톤 , final필드 , 패키지 , 접근제한자 , Getter & Setter 메서드 (0) | 2022.05.19 |
[ JAVA ] 생성자 (0) | 2022.05.17 |
[ JAVA ] 메서드 (0) | 2022.05.17 |
[ JAVA ] 클래스와 객체 (0) | 2022.05.16 |