Java 힙은 객체 만 저장하고 스택은 원시 데이터와 객체 참조 만 저장합니다.자바에서는 객체 필드에 대한 작업이 스택을 우회 할 수 있습니까?
A.a = B.b
을 고려하십시오. 여기에서 A.a
및 B.b
은 int
입니다.
제 생각에 JVM은 힙에서 스택으로 A.a
의 값을 가져온 다음 힙에있는 B.b
으로 값을 가져옵니다. 힙에있는 데이터를 변경하는 유일한 방법은 스택에서 값을 PUT하는 것입니다.
제 질문은 스택없이 Java 힙에 대한 데이터를 조작 할 수있는 방법이 있습니까? 예 : A.a
의 값을 스택 작업없이 B.b
으로 직접 복사합니다.
"JVM 구현에 따라 다르다"라고 말하면 제 질문은 달빅에 관한 것입니다.
추상 기계에 대해서만 생각하고 실제 기계에서 발생하는 일은 무시한다고 가정합니다. – delnan
답변 해 주셔서 감사합니다. 나는 counter-example을 가지고 있지만 확실치 않다 : 객체의'clone()'을 고려한다. malloc()과 memcpy()를 사용하여 Java 힙에 새로운 객체를 생성 한 후 참조를 반환하십시오. 이 방법으로, 실제로'old_obj.field'의 값을'new_obj.field'에 복사합니다. 우회하는 것입니까? –