Condividi tramite


VarHandle Classe

Definizione

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

[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
Ereditarietà
VarHandle
Attributi

Commenti

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap. L'accesso a tali variabili è supportato in varie <modalità< di accesso em>/em>, tra cui l'accesso in lettura/scrittura normale, l'accesso in lettura/scrittura volatile e il confronto e il set.

VarHandles non è modificabile e non ha uno stato visibile. VarHandles non può essere sottoclassato dall'utente.

Un valore VarHandle ha: <ul><li>a #varType variable type T, il tipo di ogni variabile a cui fa riferimento varHandle e <li>un elenco diCT1, CT2, ..., CTn#coordinateTypes coordinate types , i tipi di <espressioni< di coordinate em>/em> che individuano congiuntamente una variabile a cui fa riferimento questo VarHandle. <I tipi di coordinate e variabile /ul> possono essere primitivi o di riferimento e sono rappresentati da Class oggetti . L'elenco dei tipi di coordinate può essere vuoto.

I metodi factory che producono o java.lang.invoke.MethodHandles.Lookup lookup istanze VarHandle documentano il tipo di variabile supportato e l'elenco dei tipi di coordinate.

Ogni modalità di accesso è associata a un <metodo/em> in modalità di accesso em>, un metodo polimorfico di firma denominato per la< modalità di accesso. Quando un metodo della modalità di accesso viene richiamato in un'istanza di VarHandle, gli argomenti iniziali della chiamata sono espressioni di coordinate che indicano esattamente a quale oggetto si accede alla variabile. Gli argomenti finali alla chiamata rappresentano valori di importanza per la modalità di accesso. Ad esempio, le varie modalità di accesso di confronto e confronto o confronto e scambio richiedono due argomenti finali per il valore previsto della variabile e il nuovo valore.

L'arità e i tipi di argomenti alla chiamata di un metodo di modalità di accesso non vengono controllati in modo statico. Ogni metodo della modalità di accesso specifica invece un #accessModeType(AccessMode) access mode typeoggetto , rappresentato come un'istanza di MethodType, che funge da tipo di firma del metodo in base alla quale gli argomenti vengono controllati in modo dinamico. Un tipo di modalità di accesso fornisce tipi di parametro formali in termini di tipi di coordinate di un'istanza VarHandle e i tipi per i valori di importanza per la modalità di accesso. Un tipo di modalità di accesso fornisce anche un tipo restituito, spesso in termini di tipo variabile di un'istanza VarHandle. Quando un metodo della modalità di accesso viene richiamato in un'istanza di VarHandle, il descrittore di tipo simbolico nel sito di chiamata, i tipi di runtime di argomenti per la chiamata e il tipo di runtime del valore restituito, devono corrispondere ai tipi specificati nel tipo di modalità di accesso. Se la corrispondenza ha esito negativo, verrà generata un'eccezione di runtime.

Ad esempio, il metodo #compareAndSet modalità di accesso specifica che se il ricevitore è un'istanza VarHandle con tipi di CT1, ..., CTn coordinate e tipo di variabile , il tipo di modalità di Taccesso è (CT1 c1, ..., CTn cn, T expectedValue, T newValue)boolean. Si supponga che un'istanza VarHandle possa accedere agli elementi della matrice e che i relativi tipi di coordinate siano String[] e int mentre il tipo di variabile è String. Il tipo di modalità di accesso per in compareAndSet questa istanza varHandle è (String[] c1, int c2, String expectedValue, String newValue)boolean. Tale istanza di VarHandle può essere generata dagli elementi della MethodHandles#arrayElementVarHandle(Class) array factory method matrice di accesso e come indicato di seguito:

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

Le modalità di accesso controllano le proprietà di atomicità e coerenza. <Gli accessi em>Plain/em> read (get) e write (set) sono garantiti come atomici bit per bit solo per i riferimenti e per i valori primitivi di al massimo 32 bit e non impongono vincoli di ordinamento osservabili rispetto ai thread diversi dal< thread in esecuzione. <le operazioni em>opache</em> sono atomiche bit per bit e ordinate in modo coerente rispetto agli accessi alla stessa variabile. Oltre a rispettare le proprietà opache, <le>letture in modalità Acquire</em> e i relativi accessi successivi vengono ordinati dopo la corrispondenza <delle scritture in modalità em>Release</em> e dei relativi accessi precedenti. Oltre a rispettare le proprietà Acquire e Release, tutte le <operazioni volatile<>/em> sono completamente ordinate rispetto alle altre.

Le modalità di accesso sono raggruppate nelle categorie seguenti: <ul><li>read access mode che ottengono il valore di una variabile in base agli effetti di ordinamento della memoria specificati. Il set di metodi della modalità di accesso corrispondenti appartenenti a questo gruppo è costituito dai metodi #get get, , #getVolatile getVolatile#getAcquire getAcquire, #getOpaque getOpaque. <modalità>di accesso in scrittura che impostano il valore di una variabile con gli effetti di ordinamento della memoria specificati. Il set di metodi della modalità di accesso corrispondenti appartenenti a questo gruppo è costituito dai metodi #set set, , #setVolatile setVolatile#setRelease setRelease, #setOpaque setOpaque. <li>modalità di accesso per l'aggiornamento atomico che, ad esempio, confrontano e impostano in modo atomico il valore di una variabile con gli effetti di ordinamento della memoria specificati. Il set di metodi della modalità di accesso corrispondenti appartenenti a questo gruppo è costituito dai metodi #compareAndSet compareAndSet, , #weakCompareAndSetPlain weakCompareAndSetPlain, #weakCompareAndSetAcquire weakCompareAndSetAcquire#weakCompareAndSet weakCompareAndSet, #weakCompareAndSetRelease weakCompareAndSetRelease, #compareAndExchangeRelease compareAndExchangeRelease#compareAndExchangeAcquire compareAndExchangeAcquire#compareAndExchange compareAndExchange#getAndSet getAndSet#getAndSetAcquire getAndSetAcquire. #getAndSetRelease getAndSetRelease <li>numeric atomic update access modes that, for example, atomically get and set with add the value of a variable under specified memory ordering effects. Il set di metodi di modalità di accesso corrispondenti appartenenti a questo gruppo è costituito dai metodi #getAndAdd getAndAdd, #getAndAddAcquire getAndAddAcquire, #getAndAddRelease getAndAddRelease, li>< modalità di accesso atomico bit per bit che, ad esempio, get e bit per bit or il valore di una variabile con gli effetti di ordinamento della memoria specificati. Il set di metodi della modalità di accesso corrispondenti appartenenti a questo gruppo è costituito dai metodi #getAndBitwiseOr getAndBitwiseOr, #getAndBitwiseAnd getAndBitwiseAnd#getAndBitwiseAndRelease getAndBitwiseAndRelease#getAndBitwiseOrAcquire getAndBitwiseOrAcquire#getAndBitwiseXorAcquire getAndBitwiseXorAcquire#getAndBitwiseOrRelease getAndBitwiseOrRelease#getAndBitwiseXor getAndBitwiseXor#getAndBitwiseAndAcquire getAndBitwiseAndAcquire#getAndBitwiseXorRelease getAndBitwiseXorRelease. </ul>

I metodi factory che producono o java.lang.invoke.MethodHandles.Lookup lookup istanze VarHandle documentano il set di modalità di accesso supportate, che possono includere anche restrizioni di documentazione in base al tipo di variabile e se una variabile è di sola lettura. Se una modalità di accesso non è supportata, il metodo della modalità di accesso corrispondente genererà un'eccezione UnsupportedOperationException. I metodi factory devono documentare eventuali eccezioni aggiuntive non dichiarati che possono essere generate dai metodi della modalità di accesso. La #get get modalità di accesso è supportata per tutte le istanze di VarHandle e il metodo corrispondente non genera UnsupportedOperationExceptionmai . Se una variabile VarHandle fa riferimento a una variabile di sola lettura (ad esempio un final campo), scrivere, aggiornare atomico, aggiornamento atomico numerico e modalità di accesso atomico bit per bit non sono supportati e i metodi corrispondenti generano UnsupportedOperationException. Le modalità di accesso in lettura/scrittura (se supportate), ad eccezione di get e set, forniscono l'accesso atomico per i tipi di riferimento e tutti i tipi primitivi. Se non diversamente specificato nella documentazione di un metodo factory, le modalità get di accesso e set (se supportato) forniscono l'accesso atomico per i tipi riferimento e tutti i tipi primitivi, ad eccezione di long e double su piattaforme a 32 bit.

Le modalità di accesso eseguiranno l'override di tutti gli effetti di ordinamento della memoria specificati nel sito di dichiarazione di una variabile. Ad esempio, un varHandle che accede a un campo usando la get modalità di accesso accederà al campo come specificato <em>dalla modalità< di accesso/em> anche se tale campo è dichiarato volatile. Quando si esegue l'accesso misto è necessario prestare estrema attenzione perché il modello di memoria Java può consentire risultati sorprendenti.

Oltre a supportare l'accesso alle variabili in diverse modalità di accesso, viene fornito anche un set di metodi statici, definiti metodi di isolamento della memoria, per il controllo granulare dell'ordinamento della memoria.

La specifica del linguaggio Java consente ad altri thread di osservare le operazioni come se fossero eseguite in ordini diversi da quelli evidenti nel codice sorgente del programma, soggetti a vincoli derivanti, ad esempio, dall'uso di blocchi, volatile campi o VarHandles. I metodi statici, #fullFence fullFence, #releaseFence releaseFence#acquireFence acquireFence, #loadLoadFence loadLoadFence e #storeStoreFence storeStoreFence, possono essere usati anche per imporre vincoli. Le loro specifiche, come avviene per determinate modalità di accesso, vengono definite in termini di mancanza di "riordinazioni" - effetti di ordinamento osservabili che potrebbero altrimenti verificarsi se il recinto non era presente. Una formulazione più precisa della specifica dei metodi di modalità di accesso e dei metodi di isolamento della memoria può accompagnare gli aggiornamenti futuri della specifica del linguaggio Java.

<h1>Compilazione della chiamata dei metodi< in modalità di accesso/h1> Un'espressione di chiamata al metodo Java che assegna un nome a un metodo in modalità di accesso può richiamare un oggetto VarHandle dal codice sorgente Java. Dal punto di vista del codice sorgente, questi metodi possono accettare qualsiasi argomento e il relativo risultato polimorfo (se espresso) può essere eseguito il cast a qualsiasi tipo restituito. Questa operazione viene formalmente eseguita assegnando agli argomenti variabili e Object ai tipi restituiti dei metodi Object di modalità di accesso (se il tipo restituito è polimorfico), ma hanno una qualità aggiuntiva denominata <>polimorfismo< della firma/em> che connette questa libertà di chiamata direttamente allo stack di esecuzione JVM.

Come avviene normalmente con i metodi virtuali, le chiamate a livello di origine ai metodi della modalità di accesso vengono compilate in un'istruzione invokevirtual . In modo più insolito, il compilatore deve registrare i tipi di argomento effettivi e potrebbe non eseguire conversioni di chiamate al metodo sugli argomenti. Deve invece generare istruzioni per eseguirne il push nello stack in base ai propri tipi non invertiti. L'oggetto VarHandle stesso verrà inserito nello stack prima degli argomenti. Il compilatore genera quindi un'istruzione invokevirtual che richiama il metodo della modalità di accesso con un descrittore di tipo simbolico che descrive l'argomento e i tipi restituiti.

Per eseguire un descrittore di tipo simbolico completo, il compilatore deve anche determinare il tipo restituito (se polimorfico). Si basa su un cast sull'espressione di chiamata al metodo, se presente, oppure Object se la chiamata è un'espressione oppure void se la chiamata è un'istruzione . Il cast può essere a un tipo primitivo (ma non voida ).

Come caso dell'angolo, a un argomento non sottoposto null acast viene assegnato un descrittore di tipo simbolico di java.lang.Void. L'ambiguità con il tipo Void è innocua, poiché non sono presenti riferimenti di tipo Void ad eccezione del riferimento Null.

<h1>"invoke">Esecuzione della chiamata dei metodi< di modalità di accesso/h1> La prima volta che viene eseguita un'istruzione invokevirtual è collegata tramite la risoluzione simbolica dei nomi nell'istruzione e la verifica che la chiamata al metodo sia legale in modo statico. Questo vale anche per le chiamate ai metodi della modalità di accesso. In questo caso, il descrittore di tipo simbolico generato dal compilatore viene controllato per la sintassi corretta e i nomi in esso contenuti vengono risolti. Pertanto, un'istruzione invokevirtual che richiama un metodo in modalità di accesso verrà sempre connessa, purché il descrittore di tipo simbolico sia sintatticamente ben formato e i tipi esistano.

Quando l'oggetto invokevirtual viene eseguito dopo il collegamento, il tipo di modalità di accesso di VarHandle ricevuto viene prima controllato dalla JVM per assicurarsi che corrisponda al descrittore di tipo simbolico. Se la corrispondenza del tipo ha esito negativo, significa che il metodo di modalità di accesso che il chiamante sta richiamando non è presente sul singolo VarHandle richiamato.

La chiamata di un metodo in modalità di accesso si comporta come se una chiamata di MethodHandle#invoke, dove l'handle del metodo ricevente accetta l'istanza VarHandle come argomento iniziale. In particolare, di seguito, dove {access-mode} corrisponde al nome del metodo della modalità di accesso:

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

si comporta come se:

{@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)
            }

I metodi della modalità di accesso modulo non dichiarano la generazione di Throwable. Equivale a:

{@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)
            }

dove il tipo di metodo desiderato è il descrittore di tipo simbolico e viene eseguito un MethodHandle#invokeExact oggetto , poiché prima della chiamata della destinazione, l'handle applicherà cast di riferimento in base alle esigenze e ai valori box, unbox o primitive widen, come se MethodHandle#asType asType fosse (vedere anche MethodHandles#varHandleInvoker).

In modo più conciso, tale comportamento equivale a:

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

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

Dove, in questo caso, l'handle del metodo è associato all'istanza varHandle.

<h1>Controllo< chiamate/h1> Nei programmi tipici, la corrispondenza del tipo di modalità di accesso VarHandle ha in genere esito positivo. Tuttavia, se una corrispondenza ha esito negativo, la JVM genererà un'eccezione WrongMethodTypeException.

Pertanto, un tipo di modalità di accesso non corrispondente che potrebbe essere visualizzato come un errore di collegamento in un programma tipizzato in modo statico può essere visualizzato come dinamico WrongMethodTypeException in un programma che usa VarHandles.

Poiché i tipi di modalità di accesso contengono oggetti "attivi", Class la corrispondenza dei tipi di metodo prende in considerazione sia i nomi dei tipi che i caricatori di classe. Pertanto, anche se un varHandle VH viene creato in un caricatore L1 di classe e usato in un altro L2metodo , le chiamate al metodo di accesso varHandle sono indipendenti dai tipi, perché il descrittore di tipo simbolico del chiamante, come risolto in L2, viene confrontato con il descrittore di tipo simbolico del metodo chiamato originale, come risolto in L1. La risoluzione in L1 si verifica quando VH viene creato e vengono assegnati i relativi tipi di modalità di accesso, mentre la risoluzione in L2 si verifica quando l'istruzione invokevirtual è collegata.

Oltre ai controlli del descrittore di tipo, la capacità di un VarHandles di accedere alle variabili non è limitata. Se una variabile VarHandle viene formata in una variabile non pubblica da una classe che ha accesso a tale variabile, il varHandle risultante può essere usato in qualsiasi posizione da qualsiasi chiamante che riceve un riferimento.

A differenza dell'API Reflection di base, in cui l'accesso viene controllato ogni volta che viene richiamato un metodo riflettente, il controllo di accesso VarHandle viene eseguito quando viene creato VarHandle. Pertanto, VarHandles a variabili non pubbliche o a variabili in classi non pubbliche, in genere devono essere mantenute segrete. Non devono essere passati a codice non attendibile, a meno che l'uso del codice non attendibile non sia innocuo.

<h1>VarHandle creation</h1> Java code can create a VarHandle that directly accesses any field that is accessible to that code. Questa operazione viene eseguita tramite un'API basata su funzionalità riflettente denominata java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup. Ad esempio, è possibile ottenere un valore VarHandle per un campo non statico da java.lang.invoke.MethodHandles.Lookup#findVarHandle Lookup.findVarHandle. È anche disponibile un metodo di conversione da oggetti API Reflection core, java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle.

L'accesso ai membri di campo protetti è limitato ai ricevitori solo della classe di accesso o a una delle relative sottoclassi e la classe di accesso deve a sua volta essere una sottoclasse (o un pacchetto di pari livello) della classe di definizione del membro protetto. Se un valore VarHandle fa riferimento a un campo non statico protetto di una classe dichiarativa all'esterno del pacchetto corrente, l'argomento ricevitore verrà limitato al tipo della classe di accesso.

<h1>Interoperabilità tra VarHandles e l'API< Reflection core/h1> Usando i metodi factory nell'API java.lang.invoke.MethodHandles.Lookup Lookup , qualsiasi campo rappresentato da un oggetto API Reflection core può essere convertito in un valore varHandle equivalente dal comportamento. Ad esempio, un riflettente java.lang.reflect.Field Field può essere convertito in un oggetto VarHandle usando java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle. Le varHandles risultanti forniscono in genere un accesso più diretto ed efficiente ai campi sottostanti.

Come caso speciale, quando l'API Reflection core viene usata per visualizzare i metodi della modalità di accesso polimorfica della firma in questa classe, vengono visualizzati come metodi non polimorfici ordinari. L'aspetto riflettente, come visualizzato da java.lang.Class#getDeclaredMethod Class.getDeclaredMethod, non è influenzato dal relativo stato speciale in questa API. Ad esempio, java.lang.reflect.Method#getModifiers Method.getModifiers segnala esattamente i bit del modificatore necessari per qualsiasi metodo dichiarato in modo analogo, inclusi in questo caso native e varargs bit.

Come per qualsiasi metodo riflesso, questi metodi (quando riflesse) possono essere richiamati direttamente tramite , tramite java.lang.reflect.Method#invoke java.lang.reflect.Method.invokeJNI o indirettamente tramite java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect. Tuttavia, tali chiamate riflettenti non comportano chiamate al metodo in modalità di accesso. Tale chiamata, se ha passato l'argomento obbligatorio (un singolo, di tipo Object[]), ignorerà l'argomento e genererà un'eccezione UnsupportedOperationException.

Poiché invokevirtual le istruzioni possono richiamare in modo nativo i metodi della modalità di accesso VarHandle in qualsiasi descrittore di tipo simbolico, questa visualizzazione riflettente è in conflitto con la normale presentazione di questi metodi tramite bytecodes. Pertanto, questi metodi nativi, quando visualizzati in modo riflettente da Class.getDeclaredMethod, possono essere considerati solo segnaposto.

Per ottenere un metodo invoker per un particolare tipo di modalità di accesso, usare java.lang.invoke.MethodHandles#varHandleExactInvoker o java.lang.invoke.MethodHandles#varHandleInvoker. L'API java.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtual è anche in grado di restituire un handle di metodo per chiamare un metodo di modalità di accesso per qualsiasi tipo di modalità di accesso specificato ed è equivalente al comportamento di java.lang.invoke.MethodHandles#varHandleInvoker.

<L'interoperabilità h1>tra VarHandles e Java generics</h1> A VarHandle può essere ottenuta per una variabile, ad esempio un campo, dichiarato con tipi generici Java. Come per l'API Reflection di base, il tipo di variabile varHandle verrà costruito dalla cancellazione del tipo a livello di origine. Quando viene richiamato un metodo di modalità di accesso VarHandle, i tipi dei relativi argomenti o il tipo cast del valore restituito possono essere tipi o istanze di tipo generico. In questo caso, il compilatore sostituirà tali tipi in base alle relative eliminazioni quando costruisce il descrittore di tipo simbolico per l'istruzione invokevirtual .

Aggiunto in 9.

Documentazione java per java.lang.invoke.VarHandle.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal Android e usato in base ai termini descritti in 2.5 Attribution License Creative Commons 2.5 Attribution License.

Costruttori

VarHandle(IntPtr, JniHandleOwnership)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
JniIdentityHashCode

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
JniPeerMembers

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

PeerReference

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
ThresholdClass

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

ThresholdType

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

Metodi

AccessModeType(VarHandle+AccessMode)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

AcquireFence()

Assicura che i carichi prima della recinzione non vengano riordinati con carichi e negozi dopo la recinzione.

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
CompareAndExchange(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

CompareAndExchangeAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

CompareAndExchangeRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

CompareAndSet(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

CoordinateTypes()

Restituisce i tipi di coordinate per l'oggetto VarHandle.

Dispose()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
Dispose(Boolean)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
FullFence()

Assicura che carichi e archivi prima che la recinzione non venga riordinata con carichi e negozi dopo la recinzione.

Get(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndAdd(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndAddAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndAddRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseAnd(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseAndAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseAndRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseOr(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseOrAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseOrRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseXor(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseXorAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseXorRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndSet(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndSetAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndSetRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
GetOpaque(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetVolatile(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

IsAccessModeSupported(VarHandle+AccessMode)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

JavaFinalize()

Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
LoadLoadFence()

Assicura che i carichi prima del recinto non vengano riordinati con carichi dopo la recinzione.

Notify()

Riattiva un singolo thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitoraggio di questo oggetto.

(Ereditato da Object)
ReleaseFence()

Assicura che carichi e archivi prima che la recinzione non venga riordinata con negozi dopo la recinzione.

Set(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
SetOpaque(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

SetRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

SetVolatile(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

StoreStoreFence()

Assicura che i negozi prima della recinzione non vengano riordinati con negozi dopo la recinzione.

ToArray<T>()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
ToMethodHandle(VarHandle+AccessMode)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

ToString()

Restituisce una rappresentazione in formato stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
VarType()

Restituisce il tipo di variabile delle variabili a cui fa riferimento l'oggetto VarHandle.

Wait()

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una>notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una notifica</>em> o <em>interrotto</em> o fino a quando non è trascorsa una certa quantità di tempo reale.

(Ereditato da Object)
Wait(Int64, Int32)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una notifica</>em> o <em>interrotto</em> o fino a quando non è trascorsa una certa quantità di tempo reale.

(Ereditato da Object)
WeakCompareAndSet(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

WeakCompareAndSetAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

WeakCompareAndSetPlain(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

WeakCompareAndSetRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.Finalized()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo verificato dal runtime Android.

JavaCast<TResult>(IJavaObject)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetJniTypeName(IJavaPeerable)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

Si applica a