내가 재스민 어셈블리에 새 항목을 만든 다음이를 저장하는 경우는 주소이기 때문에, 내가 지시 aload와 함께 할 : 이제JVM, 정수 풀, 힙과 주소
new Object
dup
invokespecial.....
astore_3 ; load the object reference into local variable 3
, 동일한 형태와 같은 이러한 주소는 ... 이제
ldc "Great string"
astore_3 ; save the reference to the actual string in the constant pool
을 : 나는 상수 풀에서 문자열을 저장하려면 ... 나는 LDC로를 만들 것입니다 다음뿐만 아니라 aload으로 저장 바이트 수? 이 항목을로드하고 저장하는 데 동일한 명령어를 사용하기 때문에 JVM은 상수 풀에 속한 주소와 힙의 주소를 구별 할 수 있어야합니까?
바이트 코드를 검사 할 때 상수 풀의 실제 주소가 단지 1 바이트 색인 인 것 같습니다 (상수 풀에 대한 기본 참조가 어딘가에 보관되어있는 것 같습니다) ... 이제 그것은 상수 풀에서 som UTF8 데이터에 대한 참조이지만 실제 문자열이있는 곳 또는 다른 곳의 바이트 배열에 대한 참조 일 뿐이라는 것을 알고 있습니까? 내가 할 수 없었던 힙에서 "새로운 객체"의 주소를 검사해라. 기본적으로, 나는이 두 메모리 영역이 같은 형태의 명령어와 JVM이 어떻게 관리 할 수 있는지를 알아 내야한다. 주소가 상수 풀의 오프셋인지 아니면 힙의 객체인지 결정하십시오.
나는 당신이 '탐욕'을 의미한다고 믿는다. 'astore'는 변수에 대한 참조를 쓰고, 'aload'는 변수의 참조를 피연산자 스택에로드합니다. –
네, 그건 사실입니다 ... 무모한 .. 감사합니다! :) –