2017-11-28 7 views

답변

2

Field.slot 의미는 구현 정의입니다. HotSpot JVM에는 지정된 클래스에 대한 VM의 내부 필드 배열에 대한 인덱스가 들어 있습니다. Field 오브젝트가 작성 될 때 slot 필드가 JVM 런타임 내에 설정됩니다 (reflection.cpp 참조).

이 색인은 반드시 Java 소스 파일의 필드 순서와 일치하지 않습니다. 이것은 객체 헤더의 필드 오프셋과 관련이 없습니다. slot의 의미에 대해 어떤 가정도하지 않는 것이 좋습니다. 핵심적인 의미는 JVM이 java.lang.reflect.Field 오브젝트를 Metaspace의 내부 필드 표현으로 빠르게 맵핑 할 수있게하는 것입니다.

1

필드는 JVM에 의해 할당되고 (나는 자바 코드에서 설정할 수 없다.) 어떤 종류의 색인을 포함한다. 클래스 내의 메소드 그래서 서브 클래스의 메소드는 객체에서 그 다음에 가장 낮은 지수를 가지고있는 것 같습니다, 일부 지표는

main 1 
method1 2 
method2 3 
method3 4 
method4 5 
wait 3 
wait 4 
wait 5 
equals 6 
toString 7 
hashCode 8 
getClass 9 
notify 12 
notifyAll 13 

을 :

package slot; 

import java.lang.reflect.Field; 
import java.lang.reflect.Method; 

public class SlotTester { 

    public void method1() { 
    } 

    public void method2() { 
    } 

    public static void method3() { 
    } 

    public void method4() { 
    } 

    public static void main(String[] args) throws Exception { 

     SlotTester s = new SlotTester(); 
     Method[] methods = s.getClass().getMethods(); 

     for (Method method : methods) { 

      Field f = method.getClass().getDeclaredField("slot"); 
      f.setAccessible(true); 
      Integer slot = (Integer) f.get(method); 

      System.out.println(method.getName() + " " + slot); 
     } 
    } 
} 

디스플레이 : 간단한 프로그램은 당신에게 그것에 대해 조금 알 수 있습니다 (선언 된 클래스 내에있을지라도) 고유하지 않습니다.

그래서 나는 무엇이든 가치에 의존하고 싶지 않습니다.

관련 문제