JavaTM Platform
Standard Ed. 6

java.rmi.dgc
인터페이스 DGC

모든 슈퍼 인터페이스:
Remote


public interface DGC
extends Remote

DGC 인터페이스는, 분산 가베지 컬렉션 알고리즘의 서버 측에 사용되는 것입니다. 이 인터페이스에는 dirty 와 clean 의 2 개의 메소드가 있습니다. dirty 메소드는, 원격 참조가 클라이언트내에서 비정렬화 조작이 되었을 때에 불려 갑니다 (클라이언트는 VMID 로 표현된다). 이것에 대응하는 clean 메소드는, 그 원격 참조에의 참조가 클라이언트내에 없게 되었을 때에 불려 갑니다. dirty 메소드가 실패했을 경우에는, strong 를 true 로 지정한 clean 메소드를 호출해, 그 호출의 일련 번호를 보관 유지할 필요가 있습니다. 이와 같이 하면, 이후에 분산 가비지 컬렉터로부터 잘못한 호출을 받았을 때에 그것을 검출할 수가 있습니다. 원격 객체에의 참조는, 그 참조를 보관 유지하는 클라이언트로부터 일정한 기간만 대출됩니다. 대출 기간은, dirty 호출을 받았을 때로부터 시작됩니다. 대출이 파기되기 전에, 클라이언트가 가지는 원격 참조에 대해서 추가의 dirty 메소드를 호출해, 대출을 갱신하는 것은 클라이언트의 역할입니다. 클라이언트가 대출을 파기하기 전에 갱신하지 않으면, 분산 가비지 컬렉터는, 그 원격 객체는 이제 클라이언트로부터 참조되지 않는 것이라고 봅니다.


메소드의 개요
 void clean (ObjID [] ids, long sequenceNum, VMID  vmid, boolean strong)
          clean 메소드는, ids 로 나타내지는 각 원격 객체내의 참조 리스트로부터 vmid 를 삭제합니다.
 Lease dirty (ObjID [] ids, long sequenceNum, Lease  lease)
          dirty 메소드는, 배열 ids 에 포함되는 객체 식별자에 관련한 원격 객체 참조의 대출을 요구합니다.
 

메소드의 상세

dirty

Lease  dirty(ObjID [] ids,
            long sequenceNum,
            Lease  lease)
            throws RemoteException 
dirty 메소드는, 배열 ids 에 포함되는 객체 식별자에 관련한 원격 객체 참조의 대출을 요구합니다. lease 에는, 클라이언트의 일의의 VM 식별자 (VMID), 및 요구한 대출 기간이 포함됩니다. 로컬 VM 내에서 export 된 각 원격 객체 마다, 가비지 컬렉터는, 참조 리스트 (객체에의 참조를 보관 유지하는 클라이언트의 리스트)를 준비합니다. 대출이 허가되었을 경우는, 가비지 컬렉터는 그 클라이언트의 VMID 를, ids 내에 나타나는 각 원격 객체의 참조 리스트에 추가합니다. sequenceNum 파라미터는, 가비지 컬렉터에의 마지막 호출을 검출해 파기하기 위한 일련 번호입니다. 이후, 가비지 컬렉터에의 호출마다, 일련 번호를 늘려 갈 필요가 있습니다. VMID 는 호스트 주소를 포함해, 클라이언트에 따라서는 시큐리티상의 제한으로부터 호스트 주소를 취득할 수 없기 때문에, VMID 를 생성할 수 없는 클라이언트도 있습니다. 이 경우, 클라이언트는 null 의 VMID 를 사용할 수 있습니다. 분산 가비지 컬렉터는, 그러한 클라이언트에 VMID 를 할당합니다. dirty 메소드는, 사용하는 VMID 와 그 원격 참조에 허가된 대출 기간을 포함한 Lease 객체를 돌려줍니다 (서버는, 클라이언트의 요구보다 짧은 대출 기간 밖에 허가하지 않는 것이 있다). 클라이언트가 원격 객체 참조를 파기했을 때에, 대응하는 clean 메소드를 호출하기 위해서(때문에), 클라이언트는 가비지 컬렉터가 사용하는 VMID 를 사용하지 않으면 안됩니다. 클라이언트의 VM 는, VM 내에서 참조되는 각 원격 참조에 대해서, 최초의 dirty 메소드만을 호출합니다 (같은 원격 객체에 대해서 복수의 참조가 있는 경우에서도 같이). 전대 방편을 계속하는 경우에는, 클라이언트는, 대출이 파기되기 전에 dirty 메소드를 호출할 필요가 있습니다. 특정의 원격 객체에의 참조가 없어지면(자), 클라이언트는, 그 참조에 관련한 객체 ID 에 대한 clean 메소드를 호출할 필요가 있습니다.

파라미터:
ids - 클라이언트의 호출로 참조가 끝난 상태로서 마크하기 위한 객체 ID
sequenceNum - 순서 번호
lease - 요구한 대출
반환값:
허가한 대출
예외:
RemoteException - dirty 호출이 실패했을 경우

clean

void clean(ObjID [] ids,
           long sequenceNum,
           VMID  vmid,
           boolean strong)
           throws RemoteException 
clean 메소드는, ids 로 나타내지는 각 원격 객체내의 참조 리스트로부터 vmid 를 삭제합니다. 일련 번호를 사용해, 마지막 clean 호출을 검출합니다. 인수 strong 가 true 의 경우, clean 의 호출은, 실패한 dirty 호출의 결과로서 생긴 것이므로, 이 클라이언트의 vmid 의 일련 번호를 보존해 둘 필요가 있습니다.

파라미터:
ids - 클라이언트의 호출로 미참조로서 마크하기 위한 객체 ID
sequenceNum - 순서 번호
vmid - 클라이언트 VMID
strong - 「strong」clean 호출의 작성
예외:
RemoteException - clean 호출해에 실패했을 경우

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.