2011-04-07 3 views
0

각기 다른 JVM에서 실행중인 RMI 서버 클라이언트 관계가 있으며 RMI 서버는 대형 객체를 생성하고이를 RMI 클라이언트에 반환합니다. 이 작업이 끝나면 JVM (서버 또는 클라이언트)이 해당 객체의 실제 메모리를 소유하고 있습니까? 객체가 JVM간에 전달되면 어떻게 완료됩니까? 디스크 히트가 포함되어 있습니까? 아니면 빠른 속도로 빠져드는 마술이 있습니까?메모리의 Java RMI 객체 위치

감사

답변

2

그것은이 큰 객체가 원격 객체에게 있는지 여부에 따라 달라집니다 - 그것은 간접적으로는 java.rmi.Remote를 구현하고 수출되어 있는지 여부 - 아니면 일반 직렬화 객체는, 만약이 경우를의 하나의 JVM에서 다른 JVM으로 복사됩니다. 그것이 전자의 경우에는 항상 JVM에 남아 있습니다. 나중에있을 경우 원격 메소드에 인수로 전달되거나 원격 메소드 호출에서 리턴 될 때 하나에서 다른 것으로 복사됩니다. 복사본은 평범하고 일반적인 Java 객체이며 일반 규칙에 따라 양쪽 끝에서 가비지 수집 대상이됩니다.

+0

개체는 BufferedImage이며 직렬화 할 수 없습니다. 이것은, BufferedImage가 RMI 메소드로부터 돌려 주어지지 않은 것을 의미합니까? – Jon

+0

네, 맞습니다. –

+0

그래서 BufferedImage를 RMI 서버 호출에서 다시 얻으려면 디스크에 직접 작성해야합니다. 내가 그것을 반환하려고한다면 어떻게 될 것인가? – Jon