2010-05-05 1 views

답변

1

가장 적합한 것은 아마도 Coherence 또는 Terracotta과 같은 분산 객체 캐시 일 것입니다. 이러한 기술을 사용하면 다양한 JVM 인스턴스가 객체를 공유 할 수 있습니다.

+0

그래, 일관성에 대해 들었어. 분산 프로그래밍에서는 복제물 (컨텐트 또는 마스터 데이터)이 서버 전체에서 유지 관리됩니다. – learner

+0

흠, 여기서 벗어날 수도 있지만 [instrumentation]을 사용하여 '에이전트'를 "주입"할 수는 없습니다 (https://docs.oracle.com/javase/7/docs/api/java/lang). /instrument/package-summary.html)을 다른 JVM에서 하나의 호스트 JVM으로 가져옵니다. 그러면 에이전트와 함께하는 일에 따라 호스트 JVM의 메모리 내 객체에 액세스 할 수 있습니까? Oracle JVM을 사용하는 경우'agent' "injection"을 허용 할 필요조차 없다고 생각합니다. 기본적으로 사용 가능합니다. 다시 말하지만, 나는 틀린 길일 수 있습니다. 그러나 이것과 같은 것이 아마도 작동 할 수 있습니다 .. 누구 알아? – Tmr

0

아니요, 완전히 불가능합니다. 공유 메모리를 원할 경우 스레드를 사용하십시오.

+0

질문과 관련하여 원격으로 스레드를 사용하는 방법은 무엇입니까? – instantsetsuna

+0

@instantsetsuna : 학습자가 공유 메모리를 원합니다. 스레드는 메모리를 공유합니다. 동일한 JVM에서 "다른 응용 프로그램"을 실행하면 스레드를 사용하여 매우 잘 작동합니다. 이 질문은 별도의 JVM을 원할 이유가 없기 때문에 하나의 JVM에서 여러 스레드를 사용하는 것이 최선의 솔루션과 같습니다. –

+0

학습자가 "다른 JVM의 힙 메모리에 액세스 할 수있는 방법이 있습니까?" 다른 JVM의 * 메모리에 액세스하려고한다. 그래서, 내가 틀렸다면 정정 해 주겠지 만, 쓰레드를 사용하는 것이 옳은 대답이라고 생각하지 않습니다. – instantsetsuna

0

소리를 내고 싶지는 않습니다. 다른 자바 프로그램의 데이터에 액세스하고 문제의 프로그램 (예 : 일부 RMI 인터페이스 또는 somsocket)에서 som 인터페이스를 구현할 수 없다면 가장 가까운 것은 디버거 또는 JVMTI을 통해 이동하는 것입니다.

JVM TI (JVM TM Tool Interface)는 도구에서 사용하기위한 새로운 기본 프로그래밍 인터페이스입니다. 상태를 검사하고 JVM (Java Virtual Machine)에서 실행중인 응용 프로그램의 실행을 제어하는 ​​방법을 제공합니다. TI에서 실행되는 JVM 응용 프로그램은 프로파일 링, 디버깅, 모니터링, 스레드 분석 및 범위 분석 도구를 포함하되 이에 국한되지 않는 JVM 상태에 액세스해야하는 모든 도구를 지원합니다.

+0

TI는 JConsole과 같은 도구에서 실제로 사용하도록되어 있습니다. 귀하의 비즈니스 로직이 그것에 달려 있다면 주요 코드 냄새라고 말할 수 있습니다. –

+0

누가 비즈니스 로직을 위해 필요하다고 했습니까? – aioobe

0

직접적인 의미는 아닙니다. "다른"JVM이 RMI/SOAP와 같은 일종의 서비스 나 Terracotta와 같은 분산 객체 메소드를 통해 이러한 객체에 대한 액세스를 노출 한 다음 관련 서비스 메소드를 호출하여 객체를 가져와야합니다.

그렇다하더라도 대다수의 경우 동일한 값을 가진 객체로 끝나기는하지만 뚜렷합니다 (객체에서 setFoo를 호출하면 다른 JVM에서 해당 객체가 변경되지 않음). 이 작업을 원할 경우 테라코타 같은 마법을 사용할 수 있습니다.

그러나 이러한 많은 질문과 마찬가지로,이를 수행하려면 디자인을 다시 작성해야합니다. 서로 다른 프로세스가 객체의 정확한 인스턴스를 변경하지 않고도 서로 조정할 수 있어야합니다. :-)

0

다른 JVM의 힙 메모리에 액세스 할 수있는 방법이 있습니까?

공유 메모리 세그먼트를 생성하고이를 두 개의 JVM의 주소 공간에 매핑하는 것과 같은 일을 할 것이라고 생각합니다.

작동하지 않습니다. JNI를 사용하여 공유 세그먼트를 만들고 매핑 할 수 있지만 두 개의 JVM이 해당 메모리를 힙 메모리로 사용하도록 설득 할 수는 없습니다. 그리고 그 장애물을 극복했다면 각각의 JVM의 메모리 할당 자와 가비지 컬렉터가 서로 간섭하기 때문에 모두 엉망이 될 것입니다.

메모리 참조/주소를 알고있는 경우 가능합니까?

아무런 차이가 없습니다.

관련 문제