2011-09-02 5 views
12

현재 자바 바이트 코드를 사용하는 프로젝트에 있습니다. 이유는 "DUP"를해야 여기새 인스턴스를 만들 때 DUP가 발생하는 이유

NEW <MyClass> 
DUP 
INVOKESPECIAL <MyClass.<init>> 

: 나는 보통 새로운 클래스 인스턴스를 생성하고 그것에 메소드를 호출 할 때, 바이트 코드가 같은 것이라고 볼 수? VM Spec에서 필자는 "피연산자 스택에 최상위 값을 복제하고 그 중복 값을 피연산자 스택에 푸시"하는 설명을 얻습니다. 하지만 피연산자 스택에서 최상위 값을 복제하는 것이 필요한 이유는 무엇입니까? 감사.

답변

19

INVOKESPECIAL은 NEW에 의해 생성 된 값을 피연산자 스택에서 소비하지만이 값을 실제로 사용해야하므로 사전에 참조가 복제됩니다.

관련 문제