Share via


VarHandle 클래스

정의

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

[Android.Runtime.Register("java/lang/invoke/VarHandle", ApiSince=33, DoNotGenerateAcw=true)]
public abstract class VarHandle : Java.Lang.Object
[<Android.Runtime.Register("java/lang/invoke/VarHandle", ApiSince=33, DoNotGenerateAcw=true)>]
type VarHandle = class
    inherit Object
상속
VarHandle
특성

설명

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다. 이러한 변수에 대한 액세스는 일반 읽기/쓰기 액세스, 휘발성 읽기/쓰기 액세스 및 비교 및 집합을 비롯한 다양한 <em>액세스 모드</em>에서 지원됩니다.

VarHandles는 변경할 수 없으며 표시되는 상태가 없습니다. VarHandles는 사용자가 서브클래스할 수 없습니다.

VarHandle에는 <이 VarHandle에서 참조하는 모든 변수의 형식인 ul><li>a #varType variable type T가 있으며><, 이 VarHandle에서 참조하는 변수를 공동으로 찾는 em>좌표 식</em>의 형식<인 목록이 #coordinateTypes coordinate typesCT1, CT2, ..., CTn있습니다. </ul> 변수 및 좌표 형식은 기본 형식 또는 참조일 수 있으며 개체로 Class 표시됩니다. 좌표 형식 목록이 비어 있을 수 있습니다.

또는 java.lang.invoke.MethodHandles.Lookup lookup VarHandle 인스턴스를 생성하는 팩터리 메서드는 지원되는 변수 형식과 좌표 형식 목록을 문서화합니다.

각 액세스 모드는 액세스 모드에 대해 명명된 서명 다형 메서드<인 하나의 <em>액세스 모드 메서드/em>과 연결됩니다. VarHandle instance 액세스 모드 메서드를 호출하는 경우 호출에 대한 초기 인수는 변수에 액세스할 개체를 정확하게 나타내는 좌표 식입니다. 호출에 대한 후행 인수는 액세스 모드에 대한 중요도 값을 나타냅니다. 예를 들어 다양한 비교 및 집합 또는 비교 및 교환 액세스 모드에는 변수의 예상 값과 새 값에 대해 두 개의 후행 인수가 필요합니다.

액세스 모드 메서드 호출에 대한 인수의 arity 및 형식은 정적으로 확인되지 않습니다. 대신 각 액세스 모드 메서드는 인수가 #accessModeType(AccessMode) access mode type동적으로 검사되는 메서드 시그니처의 일종으로 사용되는 의 MethodTypeinstance 나타내는 를 지정합니다. 액세스 모드 형식은 VarHandle instance 좌표 형식과 액세스 모드에 대한 중요도 값에 대한 형식 측면에서 공식 매개 변수 형식을 제공합니다. 또한 액세스 모드 형식은 종종 VarHandle instance 변수 형식 측면에서 반환 형식을 제공합니다. VarHandle instance 액세스 모드 메서드를 호출할 때 호출 사이트의 기호 형식 설명자, 호출에 대한 인수의 런타임 형식 및 반환 값의 런타임 형식은 액세스 모드 형식에 지정된 형식과 일치해야 합니다. 일치가 실패하면 런타임 예외가 throw됩니다.

예를 들어 액세스 모드 메서드 #compareAndSet 는 수신기가 좌표 형식 및 변수 형식 CT1, ..., CTn 이 있는 VarHandle instance 경우 해당 액세스 모드 형식T이 임을 (CT1 c1, ..., CTn cn, T expectedValue, T newValue)boolean지정합니다. VarHandle instance 배열 요소에 액세스할 수 있고 해당 좌표 형식이 String[] 이고 int 변수 형식이 인 경우를 String가정해 보겠습니다. 이 VarHandle instance 에 대한 compareAndSet 액세스 모드 유형은 입니다(String[] c1, int c2, String expectedValue, String newValue)boolean. 이러한 VarHandle instance 다음과 같이 및 액세스 배열 요소에 MethodHandles#arrayElementVarHandle(Class) array factory method 의해 생성될 수 있습니다.

{@code
            String[] sa = ...
            VarHandle avh = MethodHandles.arrayElementVarHandle(String[].class);
            boolean r = avh.compareAndSet(sa, 10, "expected", "new");
            }

액세스 모드는 원자성 및 일관성 속성을 제어합니다. <em>Plain</em> 읽기(get) 및 쓰기(set) 액세스는 참조 및 최대 32비트 기본 값에 대해서만 비트 원자성으로 보장되며 실행 중인 스레드 이외의 스레드와 관련하여 관찰 가능한 순서 제약 조건을 적용하지 않습니다. <em>Opaque</em> 연산은 동일한 변수에 대한 액세스와 관련하여 비트 원자성이며 일관적으로 정렬됩니다. 불투명 속성을 <준수하는 것 외에도 em>Acquire</em> 모드 읽기 및 후속 액세스는 em>Release</em> 모드 쓰기 및 이전 액세스와 일치<한 후 순서가 지정됩니다. Acquire 및 Release 속성을 준수하는 것 외에도 모든 <em>Volatile</em> 작업은 서로에 대해 완전히 정렬됩니다.

액세스 모드는 지정된 메모리 순서 효과에서 변수 값을 가져오는 ul><li>읽기 액세스 모드 범주<로 그룹화됩니다. 이 그룹에 속하는 해당 액세스 모드 메서드 집합은 , #getVolatile getVolatile#getAcquire getAcquire#getOpaque getOpaque메서드#get get로 구성됩니다. <지정된 메모리 순서 지정 효과에서 변수 값을 설정하는 li>쓰기 액세스 모드입니다. 이 그룹에 속하는 해당 액세스 모드 메서드 집합은 , #setVolatile setVolatile#setRelease setRelease#setOpaque setOpaque메서드#set set로 구성됩니다. <li>atomic update 액세스 모드는 예를 들어 지정된 메모리 순서 지정 효과에서 변수 값을 원자적으로 비교하고 설정합니다. 이 그룹에 속하는 해당 액세스 모드 메서드 집합은 메서드 , , #compareAndExchangeAcquire compareAndExchangeAcquire#weakCompareAndSetAcquire weakCompareAndSetAcquire#weakCompareAndSetPlain weakCompareAndSetPlain#weakCompareAndSet weakCompareAndSet#compareAndExchange compareAndExchange#weakCompareAndSetRelease weakCompareAndSetRelease, #compareAndExchangeRelease compareAndExchangeRelease, #getAndSet getAndSet#getAndSetAcquire getAndSetAcquire#getAndSetRelease getAndSetRelease구성됩니다.#compareAndSet compareAndSet <li>숫자 원자성 업데이트 액세스 모드는 예를 들어 지정된 메모리 순서 지정 효과 아래의 변수 값을 추가하여 원자성으로 가져와서 설정합니다. 이 그룹에 속하는 해당 액세스 모드 메서드 집합은 메서드 #getAndAdd getAndAdd, , #getAndAddAcquire getAndAddAcquire, #getAndAddRelease getAndAddRelease<li>비트 원자성 업데이트 액세스 모드로 구성됩니다. 예를 들어 지정된 메모리 순서 효과에서 변수 값을 원자적으로 가져와 비트 OR 값으로 가져옵니다. 이 그룹에 속하는 해당 액세스 모드 메서드 집합은 , , , #getAndBitwiseOrRelease getAndBitwiseOrRelease#getAndBitwiseAndRelease getAndBitwiseAndRelease#getAndBitwiseXorRelease getAndBitwiseXorRelease#getAndBitwiseOrAcquire getAndBitwiseOrAcquire#getAndBitwiseXorAcquire getAndBitwiseXorAcquire#getAndBitwiseAnd getAndBitwiseAnd#getAndBitwiseXor getAndBitwiseXor#getAndBitwiseAndAcquire getAndBitwiseAndAcquire메서드로 구성됩니다.#getAndBitwiseOr getAndBitwiseOr </ul>

또는 java.lang.invoke.MethodHandles.Lookup lookup VarHandle 인스턴스를 생성하는 팩터리 메서드는 지원되는 액세스 모드 집합을 문서화합니다. 여기에는 변수 형식 및 변수가 읽기 전용인지 여부에 따라 제한 사항을 문서화하는 것도 포함될 수 있습니다. 액세스 모드가 지원되지 않는 경우 해당 액세스 모드 메서드는 호출에서 을 throw합니다 UnsupportedOperationException. 팩터리 메서드는 액세스 모드 메서드에 의해 throw될 수 있는 선언되지 않은 추가 예외를 문서화해야 합니다. #get get 액세스 모드는 모든 VarHandle 인스턴스에 대해 지원되며 해당 메서드는 를 throwUnsupportedOperationException하지 않습니다. VarHandle이 읽기 전용 변수(예 final : 필드)를 참조하는 경우 쓰기, 원자성 업데이트, 숫자 원자성 업데이트 및 비트 원자 업데이트 액세스 모드는 지원되지 않으며 해당 메서드는 을 throw UnsupportedOperationException합니다. 및 set를 제외하고 get 읽기/쓰기 액세스 모드(지원되는 경우)는 참조 형식 및 모든 기본 형식에 대한 원자성 액세스를 제공합니다. 팩터리 메서드 설명서에 달리 명시되지 않는 한 액세스 모드 getset (지원되는 경우)는 32비트 플랫폼에서 및 double 를 제외하고 long 참조 형식 및 모든 기본 형식에 대한 원자성 액세스를 제공합니다.

액세스 모드는 변수의 선언 사이트에 지정된 메모리 순서 지정 효과를 재정의합니다. 예를 들어 액세스 모드를 사용하여 get 필드에 액세스하는 VarHandle은 해당 필드가 로 선언된 <volatile>경우에도 액세스 모드</em>에 지정된 대로 필드에 액세스합니다. 혼합 액세스가 수행되는 경우 Java 메모리 모델이 놀라운 결과를 허용할 수 있으므로 매우 주의해야 합니다.

다양한 액세스 모드에서 변수에 대한 액세스를 지원하는 것 외에도 메모리 펜스 메서드라고 하는 정적 메서드 집합도 메모리 순서를 세분화하여 제어할 수 있도록 제공됩니다.

Java 언어 사양을 사용하면 다른 스레드가 잠금 volatile , 필드 또는 VarHandles 사용과 같이 발생하는 제약 조건에 따라 프로그램 소스 코드와 다른 순서로 실행된 것처럼 작업을 관찰할 수 있습니다. 정적 메서드, #fullFence fullFence, #acquireFence acquireFence, #releaseFence releaseFence#loadLoadFence loadLoadFence#storeStoreFence storeStoreFence를 사용하여 제약 조건을 적용할 수도 있습니다. 특정 액세스 모드의 경우와 마찬가지로 해당 사양은 펜스가 없는 경우 발생할 수 있는 관찰 가능한 순서 지정 효과인 "순서 변경"이 없다는 측면에서 표현됩니다. 액세스 모드 메서드 및 메모리 펜스 메서드 사양의 보다 정확한 구문은 Java 언어 사양의 향후 업데이트와 함께 제공될 수 있습니다.

<h1>액세스 모드 메서드 호출 컴파일/h1> 액세스 모드 메서드<의 이름을 지정하는 Java 메서드 호출 식은 Java 소스 코드에서 VarHandle을 호출할 수 있습니다. 소스 코드의 관점에서 이러한 메서드는 모든 인수를 사용할 수 있으며 해당 다형 결과(표현된 경우)는 모든 반환 형식으로 캐스팅할 수 있습니다. 공식적으로 이 작업은 액세스 모드 메서드에 가변 arity Object 인수 및 Object 반환 형식(반환 형식이 다형성인 경우)을 제공하여 수행되지만, 이러한 호출의 자유를 JVM 실행 스택에 직접 연결하는 em>시그니처 다형성</em>이라는 <추가 품질이 있습니다.

가상 메서드와 마찬가지로 액세스 모드 메서드에 대한 소스 수준 호출은 명령으로 invokevirtual 컴파일됩니다. 더 비정상적으로 컴파일러는 실제 인수 형식을 기록해야 하며 인수에 대한 메서드 호출 변환을 수행할 수 없습니다. 대신 변환되지 않은 자체 형식에 따라 스택에 푸시하는 명령을 생성해야 합니다. VarHandle 개체 자체는 인수 앞에 스택에 푸시됩니다. 그런 다음 컴파일러는 인수 및 반환 형식을 설명하는 기호 형식 설명자를 사용하여 액세스 모드 메서드를 호출하는 명령을 생성 invokevirtual 합니다.

전체 기호 형식 설명자를 실행하려면 컴파일러에서 반환 형식(다형인 경우)도 결정해야 합니다. 이는 메서드 호출 식에 대한 캐스트를 기반으로 합니다. 호출이 있는 경우 또는 Object 호출이 식인 경우 또는 호출이 문인 경우 다른 void 캐스트를 기반으로 합니다. 캐스트는 기본 형식일 수 있습니다(하지만 void).

코너 사례로 캐스팅되지 않은 null 인수에는 의 java.lang.Void기호 형식 설명자가 제공됩니다. null 참조를 제외한 형식의 참조가 없으므로 형식 VoidVoid 의 모호성은 무해합니다.

<h1>"invoke">액세스 모드 메서드< 호출 수행/h1> 명령이 처음 실행될 때 invokevirtual 명령의 이름을 상징적으로 확인하고 메서드 호출이 정적으로 합법적인지 확인하여 연결됩니다. 또한 액세스 모드 메서드에 대한 호출에 대해서도 유지됩니다. 이 경우 컴파일러에서 내보낸 기호 형식 설명자가 올바른 구문을 검사하고 포함된 이름이 확인됩니다. invokevirtual 따라서 기호 형식 설명자가 구문적으로 올바른 형식이고 형식이 존재하는 한 액세스 모드 메서드를 호출하는 명령이 항상 연결됩니다.

연결 후 가 invokevirtual 실행되면 JVM에서 수신 VarHandle의 액세스 모드 유형을 먼저 검사하여 기호 형식 설명자와 일치하는지 확인합니다. 형식 일치가 실패하면 호출자가 호출하는 액세스 모드 메서드가 호출되는 개별 VarHandle에 없음을 의미합니다.

액세스 모드 메서드의 호출은 의 호출MethodHandle#invoke처럼 동작합니다. 여기서 수신 메서드 핸들은 VarHandle instance 선행 인수로 허용합니다. 좀 더 구체적으로 말하자면, 여기서 {access-mode}은 액세스 모드 메서드 이름에 해당합니다.

{@code
            VarHandle vh = ..
            R r = (R) vh.{access-mode}(p1, p2, ..., pN);
            }

는 다음과 같이 동작합니다.

{@code
            VarHandle vh = ..
            VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
            MethodHandle mh = MethodHandles.varHandleExactInvoker(
                                  am,
                                  vh.accessModeType(am));

            R r = (R) mh.invoke(vh, p1, p2, ..., pN)
            }

(모듈로 액세스 모드 메서드는 의 Throwablethrow를 선언하지 않습니다.) 다음 코드와 동일합니다.

{@code
            MethodHandle mh = MethodHandles.lookup().findVirtual(
                                  VarHandle.class,
                                  "{access-mode}",
                                  MethodType.methodType(R, p1, p2, ..., pN));

            R r = (R) mh.invokeExact(vh, p1, p2, ..., pN)
            }

여기서 원하는 메서드 형식은 기호 형식 설명자이고 MethodHandle#invokeExact 는 수행됩니다. 대상을 호출하기 전에 핸들은 필요에 따라 참조 캐스트를 적용하고 상자, 언박스 또는 확대 기본값을 다음과 같이 MethodHandle#asType asType 적용합니다(참조 MethodHandles#varHandleInvoker참조).

더 간결하게 말하자면, 이러한 행동은 다음과 같습니다.

{@code
            VarHandle vh = ..
            VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
            MethodHandle mh = vh.toMethodHandle(am);

            R r = (R) mh.invoke(p1, p2, ..., pN)
            }

여기서 메서드 핸들은 VarHandle instance 바인딩됩니다.

<h1>호출 확인</h1> 일반적인 프로그램에서 VarHandle 액세스 모드 유형 일치는 일반적으로 성공합니다. 그러나 일치가 실패하면 JVM은 을 throw합니다 WrongMethodTypeException.

따라서 정적으로 형식화된 프로그램에서 링크 오류로 표시될 수 있는 액세스 모드 형식 불일치는 VarHandles를 사용하는 프로그램에서 동적 WrongMethodTypeException 으로 표시될 수 있습니다.

액세스 모드 형식은 "라이브" Class 개체를 포함하므로 메서드 형식 일치는 형식 이름과 클래스 로더를 모두 고려합니다. 따라서 VarHandle VH 이 한 클래스 로더 L1 에서 만들어지고 다른 L2에서 사용되는 경우에도 VarHandle 액세스 모드 메서드 호출은 형식이 안전합니다. 호출자의 기호 형식 설명자가 에서 L2확인된 대로 원래 호출 수신자 메서드의 기호 형식 설명자와 L1일치하기 때문입니다. 의 해결 L1 방법은 가 생성되고 해당 액세스 모드 형식이 할당된 경우 발생 VH 하며, 명령이 연결되면 의 해결 L2 방법이 invokevirtual 발생합니다.

형식 설명자 검사 외에도 변수에 액세스하는 VarHandles의 기능은 제한되지 않습니다. VarHandle이 해당 변수에 액세스할 수 있는 클래스에 의해 비공용 변수에 형성된 경우 해당 변수에 대한 참조를 수신하는 모든 호출자가 결과 VarHandle을 임의의 위치에서 사용할 수 있습니다.

반사 메서드가 호출될 때마다 액세스가 검사되는 핵심 리플렉션 API와 달리 VarHandle 액세스 검사는 VarHandle을 만들 때 수행됩니다. 따라서 비공용 변수 또는 비공용 클래스의 변수에 대한 VarHandles는 일반적으로 비밀로 유지되어야 합니다. 신뢰할 수 없는 코드에서 사용하지 않는 한 신뢰할 수 없는 코드로 전달해서는 안 됩니다.

<h1>VarHandle 만들기</h1> Java 코드는 해당 코드에 액세스할 수 있는 모든 필드에 직접 액세스하는 VarHandle을 만들 수 있습니다. 이 작업은 라는 java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup반사 기능 기반 API를 통해 수행됩니다. 예를 들어 비정적 필드에 대한 VarHandle은 에서 java.lang.invoke.MethodHandles.Lookup#findVarHandle Lookup.findVarHandle가져올 수 있습니다. 코어 리플렉션 API 개체 에서 변환 메서드도 있습니다 java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle.

보호된 필드 멤버에 대한 액세스는 액세스 클래스 또는 해당 서브클래스 중 하나의 수신기로만 제한되며, 액세스 클래스는 보호된 멤버의 정의 클래스의 서브클래스(또는 패키지 형제)여야 합니다. VarHandle이 현재 패키지 외부 선언 클래스의 보호된 비정적 필드를 참조하는 경우 수신기 인수는 액세스 클래스의 형식으로 좁혀집니다.

<h1>VarHandles와 Core Reflection API</h1> API의 java.lang.invoke.MethodHandles.Lookup Lookup 팩터리 메서드를 사용하여 핵심 리플렉션 API 개체가 나타내는 모든 필드를 동작에 해당하는 VarHandle로 변환할 수 있습니다. 예를 들어 를 사용하여 java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle반사 java.lang.reflect.Field Field 를 VarHandle로 변환할 수 있습니다. 결과 VarHandles는 일반적으로 기본 필드에 보다 직접적이고 효율적인 액세스를 제공합니다.

특히 코어 리플렉션 API를 사용하여 이 클래스의 시그니처 다형 액세스 모드 메서드를 보는 경우 일반 비 다형 메서드로 표시됩니다. 에서 볼 수 java.lang.Class#getDeclaredMethod Class.getDeclaredMethod있듯이 반사 모양은 이 API의 특별한 상태 영향을 받지 않습니다. 예를 들어 는 java.lang.reflect.Method#getModifiers Method.getModifiers 이 경우 nativevarargs 비트를 포함하여 유사하게 선언된 메서드에 필요한 한정자 비트를 정확하게 보고합니다.

반영된 메서드와 마찬가지로 이러한 메서드(반영된 경우)는 를 통해 직접, JNI를 통해 java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke또는 를 통해 java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect간접적으로 호출될 수 있습니다. 그러나 이러한 반사 호출은 액세스 모드 메서드 호출을 초래하지 않습니다. 필수 인수(형식 Object[]의 단일 인수)를 전달한 경우 이러한 호출은 인수를 무시하고 을 UnsupportedOperationExceptionthrow합니다.

지침은 기호 형식 설명자에서 기본적으로 VarHandle 액세스 모드 메서드를 호출할 수 있으므로 invokevirtual 이 반사 뷰는 바이트 코드를 통해 이러한 메서드의 일반적인 프레젠테이션과 충돌합니다. 따라서 이러한 네이티브 메서드는 에서 반사적으로 볼 Class.getDeclaredMethod때 자리 표시자로만 간주될 수 있습니다.

특정 액세스 모드 형식에 대한 호출자 메서드를 가져오려면 또는 java.lang.invoke.MethodHandles#varHandleInvoker를 사용합니다java.lang.invoke.MethodHandles#varHandleExactInvoker. 또한 API는 java.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtual 지정된 액세스 모드 형식에 대한 액세스 모드 메서드를 호출하는 메서드 핸들을 반환할 수 있으며 동작에서 java.lang.invoke.MethodHandles#varHandleInvoker와 동일합니다.

<>VarHandles와 Java 제네릭 간의 h1 상호 운용성/h1> Java 제네릭< 형식으로 선언된 필드와 같은 변수에 대해 VarHandle을 가져올 수 있습니다. 핵심 리플렉션 API와 마찬가지로 VarHandle의 변수 형식은 원본 수준 형식의 삭제에서 생성됩니다. VarHandle 액세스 모드 메서드가 호출되면 해당 인수의 형식 또는 반환 값 캐스트 형식은 제네릭 형식 또는 형식 인스턴스일 수 있습니다. 이 경우 컴파일러는 명령에 대한 invokevirtual 기호 형식 설명자를 생성할 때 해당 형식을 지우기로 바꿉니다.

9에 추가되었습니다.

에 대한 Java 설명서입니다 java.lang.invoke.VarHandle.

이 페이지의 일부는 만들고 공유하며 에 설명된 용어에 따라 사용되는 작업을 기반으로 수정됩니다.

생성자

VarHandle(IntPtr, JniHandleOwnership)

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

속성

Class

Object의 런타임 클래스를 반환합니다.

(다음에서 상속됨 Object)
Handle

기본 Android instance 대한 핸들입니다.

(다음에서 상속됨 Object)
JniIdentityHashCode

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
JniPeerMembers

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

PeerReference

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
ThresholdClass

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

ThresholdType

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

메서드

AccessModeType(VarHandle+AccessMode)

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

AcquireFence()

펜스 앞의 로드가 펜스 뒤의 하중 및 저장소로 다시 정렬되지 않도록 합니다.

Clone()

이 개체의 복사본을 만들고 반환합니다.

(다음에서 상속됨 Object)
CompareAndExchange(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

CompareAndExchangeAcquire(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

CompareAndExchangeRelease(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

CompareAndSet(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

CoordinateTypes()

이 VarHandle의 좌표 형식을 반환합니다.

Dispose()

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
Dispose(Boolean)

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
Equals(Object)

다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다.

(다음에서 상속됨 Object)
FullFence()

펜스 앞의 로드 및 저장소가 펜스 뒤의 하중 및 저장소로 다시 정렬되지 않도록 합니다.

Get(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAcquire(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndAdd(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndAddAcquire(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndAddRelease(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndBitwiseAnd(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndBitwiseAndAcquire(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndBitwiseAndRelease(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndBitwiseOr(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndBitwiseOrAcquire(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndBitwiseOrRelease(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndBitwiseXor(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndBitwiseXorAcquire(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndBitwiseXorRelease(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndSet(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndSetAcquire(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetAndSetRelease(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetHashCode()

개체의 해시 코드 값을 반환합니다.

(다음에서 상속됨 Object)
GetOpaque(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetVolatile(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

IsAccessModeSupported(VarHandle+AccessMode)

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

JavaFinalize()

가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다.

(다음에서 상속됨 Object)
LoadLoadFence()

펜스 앞의 로드가 펜스 뒤의 부하로 다시 정렬되지 않도록 합니다.

Notify()

이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다.

(다음에서 상속됨 Object)
NotifyAll()

이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다.

(다음에서 상속됨 Object)
ReleaseFence()

펜스 앞에 있는 로드 및 저장소가 펜스 뒤의 매장으로 다시 정렬되지 않도록 합니다.

Set(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

SetHandle(IntPtr, JniHandleOwnership)

Handle 속성을 설정합니다.

(다음에서 상속됨 Object)
SetOpaque(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

SetRelease(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

SetVolatile(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

StoreStoreFence()

펜스 앞의 매장이 펜스 뒤의 매장으로 순서를 다시 지정하지 않도록 합니다.

ToArray<T>()

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
ToMethodHandle(VarHandle+AccessMode)

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

ToString()

개체의 문자열 표현을 반환합니다.

(다음에서 상속됨 Object)
UnregisterFromRuntime()

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
VarType()

이 VarHandle에서 참조하는 변수의 변수 형식을 반환합니다.

Wait()

현재 스레드가 각성될 때까지 대기하도록 합니다. 일반적으로 <알림을<> 받>거나<<> 중단/em>합니다.

(다음에서 상속됨 Object)
Wait(Int64)

현재 스레드가 깨어날 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 중단</>em>>을 받거나 <일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wait(Int64, Int32)

현재 스레드가 깨어날 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 중단</>em>>을 받거나 <일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)
WeakCompareAndSet(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

WeakCompareAndSetAcquire(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

WeakCompareAndSetPlain(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

WeakCompareAndSetRelease(Object[])

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

명시적 인터페이스 구현

IJavaPeerable.Disposed()

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
IJavaPeerable.DisposeUnlessReferenced()

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
IJavaPeerable.Finalized()

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
IJavaPeerable.JniManagedPeerState

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

(다음에서 상속됨 Object)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

GetJniTypeName(IJavaPeerable)

VarHandle은 변수 또는 정적 필드, 비정적 필드, 배열 요소 또는 오프힙 데이터 구조의 구성 요소를 포함하여 매개 변수에 대해 동적으로 강력한 형식의 참조입니다.

적용 대상