자바 JAVA/자바 관련 상식
메모리영역 ( 코드 영역 , 데이터 영역 , 힙 영역 , 스택 영역)
saml2l
2020. 5. 13. 12:34
메모리 영역
- 코드 ( code )영역
- 컴파일로 된 .class 코드 영역 (= 클래스/ 코드 /메서드 영역)
- 0과 1로 된 2진수 (binary) 영역
- static 변수/ static 메서드 (=static영역) : class 가 실행되기 전에 미리 메모리가 확보된다.
- ☆프로그램이 실행되면 모든 코드가 저장되어있는 상태가 아니고
- new키워드로 객체가 생성되기 전엔 텍스트 일뿐이다.
- 객체 생성 후 메서드를 실행하면 해당 클래스 코드에 대한 정보를 method area 에 저장하게 된다.
- 스택( stack ) 영역
- 가장 늦게 들어온 것부터 처리한다.
- main()메서드가 가장 먼저 호출된다. ( 지역변수를 저장할 메모리가 필요하기 때문에)
- 메서드가 생성될때 마다 하나씩 생성되며 메서드가 호출되면 메서드와 메서드의 정보는 stack area에 쌓이게 되고
- 메서드 호출이 종료될때 이 영역에서 제거된다.
- 힙 ( heap ) 영역
- 객체 인스턴스 ( new 키워드가 들어가는)는 무조건 heap 영역에 만들어진다. (생성자 메서드)
- 호출되는 클래스 내의 메서들도 저장된다.
- *만들어지는 순서 : code - stack - heap
- *종료되는 순서 : heap - stack - code
- 사용자가 관리하는 인스턴스가 생성되는 공간.
- 객체를 동적으로 생성하면 인스턴스가 heap area에 할당되어 사용되어진다.
- 프로그램은 시작할때 미리 이 영역을 많이 할당해놓는다.
- Runtime Data Area (데이터 영역)
- 자바는 운영체제으로부터 독립되어 JVM 환경에서 동작할 수 있도록 설계가 되어있는 언어이다.
- 자바 프로그램이 실행되면 JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고
- 메모리를 용도에 따라 여러 영역으로 나눈다.
- 앞의 세가지 영역이 이 데이터 에어리어 안에 속한다.