티스토리 뷰
1. C
-프로그램을 실행시키면 운영체제는 실행시킨 프로그램을 위한 메모리 공간을 할당
-할당되는 메모리 공간은 크게 스택, 힙, 데이터 영역으로 나뉨
-각 메모리 공간은 목적에 따라 할당되는 시점, 장소가 다름
1) 데이터 영역
-전역변수와 static 변수가 할당
-프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리에서 소멸
2) 스택 영역
-함수 호출 시 생성되는 지역 변수와 매개 변수가 저장
-함수 호출이 완료되면 사라짐
3) 힙 영역
-필요에 의해 동적으로 메모리를 할당할 때 사용
-배열을 프로그램 런타임에 메모리 크기를 결정하고 싶을 때 동적할당을 통해 힙 영역 할당
2. Java
http://ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=520
JVM 메모리 모델
1) Method 영역
-공유 메모리 영역이라고도 한다.
-클래스의 메소드에 대한 바이트코드, 클래스의 전역변수인 클래스 변수(static) 위치
-JVM에서 실행되고 있는 모든 스레드에 의해 공유
-JVM은 복수개의 스레드가 메소드를 정상적으로 사용하기 위해 동기화기법 제공
-static 필드(클래스 변수)
-각 클래스의 static 필드가 확보
-사용을 위해 클래스 이름으로 호출 시 메모리에 적재
-메서드(바이트 코드)
-메서드의 실행 로직에 대한 바이트 코드가 메모리로 적재되는 공간
-실행 로직이 메모리에 적재되야 cpu가 fetch할 수 있음
-자바의 모든 로직은 메서드에만 존재
-클래스는 필드와 메서드로만 구성되어있기 때문에 메서드에 대한 바이트코드도 static 필드와 마찬가지로 클래스를 객체 생성할 시점에 메모리에 적재(예외 : main())
-장점
-기동시간의 단축
-끝까지 사용되지 않는 클래스(필드, 메서드)가 있을 경우 메모리를 절약
-스택과 같이 필요에 의해 임시적으로 생성되고 사라지는 것이 아니라
-메서드 영역은 프로그램이 시작할 때부터 끝날 때까지 계속 존재하는 것
-힙 안의 객체와 같이 실행 시 확보되는 것이 아니라 계속해서 정적으로 존재
2) Stack 영역
-메소드가 호출되어 수행 될 때, 매개변수, 지역변수, 리턴 값 등을 저장
-메소드 호출과 함께 메모리 공간 할당, 메소드 수행을 마칠 때 시스템에 반환
-쓰레드에 따라 개별적으로 구성
3) Heap 영역
-자바에서 객체를 저장할 때 사용하는 메모리 공간
-new 를 이용하여 생성된 객체 저장
-객체, 배열, String 등 등
ex)
'Java' 카테고리의 다른 글
instanceof 연산자 (0) | 2017.01.12 |
---|---|
String 메서드 (0) | 2017.01.12 |
String 비교 (0) | 2017.01.11 |
다형성(Polymorphism) (0) | 2017.01.11 |
문자열의 Call by Value 개념 (0) | 2017.01.11 |