2011. 1. 24. 18:09
'JAVA' 카테고리의 다른 글
java 소스분석 (0) | 2012.03.08 |
---|---|
JAVA 이전버전 설치하기 (0) | 2011.04.05 |
소켓으로 메일 발송하기. (0) | 2010.08.31 |
정규식-java,javascript,UNIX (0) | 2010.08.25 |
가비지컬렉션 (0) | 2010.07.03 |
java 소스분석 (0) | 2012.03.08 |
---|---|
JAVA 이전버전 설치하기 (0) | 2011.04.05 |
소켓으로 메일 발송하기. (0) | 2010.08.31 |
정규식-java,javascript,UNIX (0) | 2010.08.25 |
가비지컬렉션 (0) | 2010.07.03 |
소켓으로 메일 발송하기.
JAVA 이전버전 설치하기 (0) | 2011.04.05 |
---|---|
GoF Design Patterns - 다시보는 Singleton (Java, C# .Net ) (0) | 2011.01.24 |
정규식-java,javascript,UNIX (0) | 2010.08.25 |
가비지컬렉션 (0) | 2010.07.03 |
객체지향설계5원칙 (0) | 2010.05.24 |
1.자바,자바스크립트에서 정규식
http://kio.zc.bz/Lecture/regexp.html
2.유닉스
http://www.ibm.com/developerworks/kr/library/tutorial/au-unixtips3/section2.html
GoF Design Patterns - 다시보는 Singleton (Java, C# .Net ) (0) | 2011.01.24 |
---|---|
소켓으로 메일 발송하기. (0) | 2010.08.31 |
가비지컬렉션 (0) | 2010.07.03 |
객체지향설계5원칙 (0) | 2010.05.24 |
RMI (0) | 2008.04.21 |
소켓으로 메일 발송하기. (0) | 2010.08.31 |
---|---|
정규식-java,javascript,UNIX (0) | 2010.08.25 |
객체지향설계5원칙 (0) | 2010.05.24 |
RMI (0) | 2008.04.21 |
가비지 컬렉션, Garbage Collection (0) | 2008.03.03 |
정규식-java,javascript,UNIX (0) | 2010.08.25 |
---|---|
가비지컬렉션 (0) | 2010.07.03 |
RMI (0) | 2008.04.21 |
가비지 컬렉션, Garbage Collection (0) | 2008.03.03 |
디자인 패턴 (0) | 2007.10.09 |
가비지컬렉션 (0) | 2010.07.03 |
---|---|
객체지향설계5원칙 (0) | 2010.05.24 |
가비지 컬렉션, Garbage Collection (0) | 2008.03.03 |
디자인 패턴 (0) | 2007.10.09 |
WL81에서 BLOB 사용법 (0) | 2007.03.23 |
1. 더 이상 프로그램에서 사용하지 않을 개체Object를 찾아낸다.그러나 실제로 어떤 개체가 마지막으로 사용되었고, 따라서 더 이상 사용되지 않을 것이란 사실을 알아내기는 일반적으로 불가능하다. 프로그램에 앞으로 주어질 입력을 무시하더라도 특정 개체가 유효한지 알아내는 일반적인 알고리듬은 없다. (정지 문제Halting Problem 참고) 따라서 더 이상 프로그램에서 사용하지 않을 개체를 찾아내기 위해서 가비지 컬렉터는 매우 확실하고 보수적인 방법을 사용하는데, 그것은 해당 개체를 참조할 수 있는 방법이 있는가를 알아내는 것이다. 프로그램에서 어떤 개체에 접근할 방법이 없는 이상 그 개체는 더 이상 누구도 사용할 수 없고, 따라서 그 개체는 유효하지 않다고 판단하는 것이다.
2. 해당 개체가 사용하는 리소스를 회수한다.
1. 백색, 회색, 검은 색 집합을 만든다. 이 집합들은 사이클 내내 유지된다.여기서 루트는 프로그램이 즉각적으로 접근할 수 있는 특별한 개체들이고, 일반적으로 전역 개체, 스택Stack 내의 개체, 레지스터Register 내의 개체를 의미한다. 루트 내에 있는 개체로부터 참조 가능한 개체는 다시 접근 가능한 개체로 간주된다. 말하자면, 프로그램이 즉시 접근 가능한 개체로부터 포인터 연산을 반복하여 참조 가능한 개체는 모두 접근 가능한 개체인 것이고, 가비지 컬렉션 사이클은 루트로부터 참조 가능한 개체를 모두 찾아내는 과정으로 간주할 수 있다. 이 과정에서 흰색 집합은 자원 회수 대상이 되는 개체가 들어있는 집합이고, 검은 색 집합은 사용 가능성이 있으므로 회수하지 않는 개체의 집합이 된다. 사이클이 모두 종료되면 3번 과정에 의해서 흰색 집합에 있는 어떤 개체도 검은 색 집합에 있는 개체로부터 참조될 수 없다는 점에 주목하자. 이제 흰색 집합에 남은 개체는 프로그램에서 접근할 수 없는 개체이고 따라서 참조될 수 없으므로 가비지 컬렉터는 이 개체들을 해제하게 된다.
2. 검은 색 집합은 초기에 비어있고, 회색 집합에는 루트Root라고 불리는 특별한 개체를 넣는다. 흰색 집합에는 그 외 모든 개체를 넣는다.
3. 회색 집합에서 개체 하나를 꺼내서, 이 개체에서 포인터 연산 한 번으로 닿을 수 있는 (보통은 멤버) 모든 흰색 개체를 회색 집합에 넣는다.
4. 회색 집합에서 꺼낸 개체를 검은 색 집합으로 옮긴다.
5. 회색 집합에 개체가 남아 있으면 3으로, 남아 있지 않으면 사이클을 종료한다.
표시하고 치우기Mark-and-Sweep는 각 개체에 현재 이 개체가 흰색인지, 회색인지, 아니면 검은 색인지를 표시할 수 있는 플래그를 만들어두고 가비지 컬렉션 사이클 동안 이 플래그를 마킹해서 결과적으로 남은 흰색 개체를 지워주는 방법인데, 메모리 상에서 개체의 배치가 달라지지 않기 때문에 추가적인 메모리를 필요로 하지 않지만 단편화Fragmentation가 생길 수 있다는 문제점이 있다.표시하고 치우기를 사용하는 가비지 컬렉터는 개체를 메모리 공간 상에서 실제로 이동하지 않으므로 고정 가비지 컬렉터Non-Moving Garbage Collector라고 부르고, 멈추고 복사나 표시하고 압축과 같은 방법을 사용하는 가비지 컬렉터는 이동 가비지 컬렉터Moving Garbage Collector라고 부른다. 이동 가비지 컬렉터를 사용할 경우 가비지 컬렉션 사이클마다 모든 개체의 참조를 조정할 수 없으므로, 개체 참조는 핸들을 가리키고 있고, 핸들을 다시 한 번 더 참조하면 실제 포인터를 얻어올 수 있도록 구현되어 있어야 한다. 이렇게 구현할 경우 메모리 공간 상에서 개체를 재배치한 뒤 핸들이 참조하고 있는 포인터만 바꾸면 실제 개체가 갖고 있는 참조를 수정하지 않고도 개체의 재배치를 완료할 수 있기 때문이다.
멈추고 복사Stop-and-Copy는 메모리 상에 활성 영역과 비 활성 영역을 구분한 뒤, 활성 영역에 대한 가비지 컬렉션 사이클이 끝나면 검은 색 집합 내의 모든 개체를 비활성 영역으로 옮기고, 이전 활성 영역을 비활성 영역으로 표기하고, 비활성 영역을 활성 영역으로 사용한다. 표시하고 치우기에서 볼 수 있던 단편화가 해결되는 반면 가비지 컬렉션 사이클 동안 메모리 사용량이 두 배로 증가한다는 문제점이 있다. 또한 개체를 복사하는 데 상당한 양의 퍼포먼스 부담을 갖게 된다.
표시하고 압축Mark-and-Compact은 가비지 컬렉션 대상인 개체를 모두 수집한 뒤, 남아 있는 개체를 하위 주소로 이동하면서 빈 공간을 남기지 않는 방법이다. 단편화를 제거하면서도 멈추고 복사와 같이 메모리 사용량 부담을 지지 않을 수 있는 방법이다.
1. 새로 생긴 개체는 오래 사용하지 않을 가능성이 클 것이다..세대별 가비지 컬렉션에서는 가비지 컬렉션 사이클 한 번을 거칠 때마다 수거되지 않은 개체들이 한 세대씩 나이를 먹는다. 다음 차례에는 가장 어린 세대에 대해서만 가비지 컬렉션을 수행할 수 있게 되는데, 이 때에는 흰색 집합에 가장 어린 세대의 개체만 넣어두고, 어린 세대로부터 상위 세대에 대한 참조가 발견될 경우, 가정 3에 의해서 상위 세대의 개체는 하위 세대의 개체를 참조할 가능성이 낮으므로 해당 상위 세대의 개체가 참조하는 개체는 추적하지 않는 방식으로 좀 더 적은 연산을 수행하게 된다. 이 때, 상위 세대의 개체가 하위 세대를 참조할 가능성이 전혀 없는 것이 아니기 때문에, 사용중인 어린 세대 개체를 해제하지 않기 위해서 상위 세대의 참조가 변경될 때마다 하위 세대를 참조하는지 확인하여 따로 추적해야 할 대상으로 간주하는 추가적인 연산이 필요하다.
2. 개체가 오래 사용될수록 그 뒤로도 계속 사용될 가능성이 클 것이다.
3. 새로 생긴 개체는 특정 기간 동안 서로를 빈번하게 참조하는 경향이 있을 것이다.
4. 메모리의 일부만 정리하는 것은 전체를 정리하는 것보다 비용이 낮을 것이다.
패턴
http://blog.naver.com/gamediz/20040317330
UML
http://cafe.naver.com/smartnet.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=124
RMI (0) | 2008.04.21 |
---|---|
가비지 컬렉션, Garbage Collection (0) | 2008.03.03 |
WL81에서 BLOB 사용법 (0) | 2007.03.23 |
자바 강좌 링크 (0) | 2007.03.13 |
데이터베이스 프로그래밍에서 기본적으로 지켜야할 사항 (0) | 2007.01.12 |