Sanggu's blog




최상단 광고 코드

 추천 사이트

 애자일 이야기 : http://agile.egloos.com
 서명덕 기자의 인터넷 : http://itviewpoint.com
 비지니스 뉴스 : http://www.ciobiz.co.kr
 MOCOMSYS : http://www.mocomsys.com
 Apache Software : http://www.apache.org
 소프트웨어 기술경력관리: http://career.sw.or.kr
 한이음 (지식경제부): http://www.hanium.or.kr
 IT 기술 뉴스: http://www.bloter.net/
 IBM 티볼리 까페: http://cafe.naver.com/tivolitool.cafe
 JAVA jar 검색 : http://www.findjar.com
 VM Ware 가상화: http://www.vmware.com

2011년 10월 5일 수요일

JAVA Heap 메모리

1. heap 개요.
자바 프로그램에 있어서 객체 생성 문제, 메모리 관리, 스레드와 예외 처리경우 그리고  자바 스택 및 힙의 기초를 아는 것은 매우 중요합니다.

자바에서 생성된 new object들  및 메모리 변수들 (INT, Float, Double ...) 등과 같은 원시 변수는 stack에 할당되며 또한 지역 변수 및 멤버 변수 (클래스의 예 : 필드)는 heap stack에 저장됩니다.
또한 method가 호출될 때 method와 지역 변수는 스택에 쌓이게 되며, method 호출이 완료되면 stack point가 감소됩니다.

다중 스레드 응용 프로그램의 영역의 각 스레드는 자신의 스택을 가지고 있지만 동일한 힙을 공유합니다. 그래서 힙 공간에 동시 액세스 문제를 방지하려면 프로그래밍시 주의해야 합니다. 또한 각 스레드는 자신의 스택을 가지고 있지만 코드를 통해 동기화 하지 않으므로 힙 자체는 thread - safe하지 않습니다.


2. heap 영역
java sun의 heap 영역을 살펴 봅시다.
heap 영역은 Young generation과 Old generation 영역으로 나뉘어 집니다.

heap 영역에 대해 살펴 보면 object 생성시 Young generation에 쌓이게 되며 Young generation이 full 일때, object는 참조(reference) 및 사용(instance) 되어지고 있다면 Old generation 영역으로 넘어가게 됩니다. 사실 Young generation 에 존재하는 시간은 대략 1초 미만으로 full이 됬을시에 Garbage Collector가 실행됩니다. 그러나 지속적으로 사용되고 full이 된다면 지속적으로 사용할것이라고 판단이 되어 Old generation으로 넘어가게 됩니다.

3. heap size의 판단
 heap size는 programing 으로 가능합니다.
 ================================================
Runtime rt = Runtime.getRuntime();
long freeSize = rt.freeMemory();
long totalSize = rt.totalMemory();
System.out.println( " freeSize : " + freeSize + "bytes");
System.out.println( " totalSize : " + totalSize + "bytes");

4. JAVA daemon이 heap 부족 현상 해결책
보통 heap size 부족으로 에러가 발생할 시에 가장 많이 보는 exception은 아래와 같을 것입니다.
java.lang.OutOfMemoryError
이 경우 heap size를 늘려주어 JAVA daemon을 띄우면 됩니다.
이용하는 option은 -Xms 와 -Xmx 이며 아래와 같이 JAVA daemon을 실행시킵니다.
ex) java -Xms64M -Xmx128M -jar test.jar

댓글 없음:

댓글 쓰기