2013년 8월 27일 화요일

JAVA JVM의 메모리 영역 [오라클교육오라클자바교육강의강좌,자바교육,ORACLEJAVA교육강의강좌]

JVM의 실행 메모리 영역에 대해 알아보자구요... JVN의 메모리 구조에 대해 본다는 이야기 입니다.

오라클자바커뮤니티에서 설립한  개발자실무교육6년차 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클, SQL, 튜닝, 자바, 스프링, Ajax, jQuery, 안드로이드, 아이폰, 닷넷, C#, ASP.Net)   www.onjprogramming.co.kr



JVM 실행 메모리 영역
메쏘드(method) 영역 : 클래스의 메소드에 대한 바이트코드, 전역변수(클래스 변수)
힙(heap) 영역 : 객체를 저장할때 사용하는 메모리
스택(stack) 영역 : 지역변수,함수의 인자,함수의 리턴값,리턴 번지
레지스터(registers) : 가상 머신의 현재 상태를 보여줌, 현재 실행되고 있는 메소드의 실행 포인터를 저장
실행 풀(Runtime Constant Pool) : 숫자 리터럴과 상수 필드 포함, 메소드 영역으로 부터 할당 받는다.


[ JVM 실행 메모리 영역 ]

메소드 내에서 객체 참조형으로 선언된 변수인 경우(String s = new String("abc") 일때의 s) 지역변수로서 스택에 위치하며 힙에 저장되어 있는 객체에 대한 참조값을 가지게 됩니다.
객체 참조형 변수의 값이 null 이라는 의미는 아무것도 참조하고 있지 않다는 의미 입니다.
New 연산자는 힙(heap) 메모리에 객체를 만들고 그 객체의 참조값을 반환 합니다.(Hello h = new Hello()) ---> Memory Heap에 Hello 클래스의 인스턴스(객체)를 만들고 그것을 스택에 있는 h라는 변수가 참조하도록 합니다. C에서의 포인터 변수와 유사 합니다.)
객체 참조 변수의 경우 대입, 메소드 호출시의 인자, 반환형 등으로 사용 될 때 참조 값만 전달 될 뿐, 객체 자체가 복제되어 전달되는 것은 아닙니다.
아래의 예제를 참고하세요

class C
{
public static void
main(String[] args)
{
int i = 3;
f(i);
}
static void f(int arg)
{
int i = 10;
double f = 3.14
}
}
메모리 구조는 아래와 같습니다.

이상 JVN의 메모리 영역에 대해 살펴 보았습니다. 다음 강좌에서는 자바에서의 변수의 종류와 그 쓰임새에 대해 보도록 하겠습니다.

댓글 없음:

댓글 쓰기