Repository navigation
Expand file tree
/
Copy pathObjectAccess.java
More file actions
160 lines (144 loc) · 5.56 KB
/
Copy pathObjectAccess.java
File metadata and controls
160 lines (144 loc) · 5.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
* Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
*
* Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product
* that is described in this document. In particular, and without limitation, these intellectual property
* rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or
* more additional patents or pending patent applications in the U.S. and in other countries.
*
* U.S. Government Rights - Commercial software. Government users are subject to the Sun
* Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its
* supplements.
*
* Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or
* registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks
* are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the
* U.S. and other countries.
*
* UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open
* Company, Ltd.
*/
package com.sun.max.vm.object;
import static com.sun.cri.bytecode.Bytecodes.*;
import java.lang.reflect.*;
import java.nio.*;
import com.sun.cri.bytecode.*;
import com.sun.max.annotate.*;
import com.sun.max.lang.*;
import com.sun.max.unsafe.*;
import com.sun.max.vm.actor.holder.*;
import com.sun.max.vm.heap.*;
import com.sun.max.vm.layout.*;
import com.sun.max.vm.monitor.*;
import com.sun.max.vm.reference.*;
/**
* This class implements a facade for the {@link Layout Layout} class, which
* accepts only {@code Reference} objects.
*
* @author Bernd Mathiske
*/
public final class ObjectAccess {
private static final ClassActor DirectByteBuffer = ClassActor.fromJava(Classes.forName("java.nio.DirectByteBuffer"));
protected ObjectAccess() {
}
/**
* Checks whether the specified object is {@code zero} (i.e. is {@code null}).
*
* @param object the object to check
* @return {@code true} if the object reference is {@code zero}; {@code false} otherwise
*/
@INLINE
public static boolean isZero(Object object) {
return Reference.fromJava(object).isZero();
}
/**
* Checks whether the specified object is an array.
*
* @param object the object to check
* @return {@code true} if the object is an array; {@code false} otherwise
*/
public static boolean isArray(Object object) {
return Layout.isArray(Reference.fromJava(object));
}
/**
* Converts an object reference to a pointer to the object's <i>origin</i>.
*
* @param object the object
* @return a pointer to the specified object's origin
*/
@INLINE
public static Pointer toOrigin(Object object) {
return Reference.fromJava(object).toOrigin();
}
/**
* Reads the hub of an object reference.
*
* @param object the object for which to read the hub
* @return a reference to the hub of the object
*/
@INLINE
public static Hub readHub(Object object) {
return UnsafeCast.asHub(Reference.fromJava(object).readHubReference().toJava());
}
/**
* Reads the hub of an object and uses the hub to get the class actor for the specified object.
*
* @param object the object for which to read the hub
* @return a reference to the class actor, which represents the object's type
*/
@INLINE
public static ClassActor readClassActor(Object object) {
final Hub hub = UnsafeCast.asHub(Reference.fromJava(object).readHubReference().toJava());
return hub.classActor;
}
/**
* Reads the "misc" word from an object's header. The misc word encodes lock state, hash code, etc.
*
* @param object the object for which to read the misc word
* @return the misc word for the specified object
*/
@INLINE
public static Word readMisc(Object object) {
return Layout.readMisc(Reference.fromJava(object));
}
/**
* Write the "misc" word into an object's header.
*
* @param object the object for which to write the misc word
* @param value the new value for the misc word
*/
@INLINE
public static void writeMisc(Object object, Word value) {
Layout.writeMisc(Reference.fromJava(object), value);
}
/**
* Atomically compare and swap the misc word of an object header.
*
* @param object the object in whose header to compare and swap
* @param expectedValue the value to compare the misc word against
* @param newValue the new value to be written into the object header
* @return the old value of the misc word, if the comparison succeeds; the new value if it fails
*/
@INLINE
public static Word compareAndSwapMisc(Object object, Word expectedValue, Word newValue) {
return Layout.compareAndSwapMisc(Reference.fromJava(object), expectedValue, newValue);
}
/**
* Computes a new default hashcode for the specified object.
*
* @param object the object for which to calculate the hash code
* @return a new identity hashcode for the specified object
*/
public static int makeHashCode(Object object) {
return Monitor.makeHashCode(object);
}
/**
* Compute the cell size of an object using the appropriate layout.
*
* @param object the object for which to compute the size
* @return the size of the objects in bytes
*/
public static Size size(Object object) {
return Layout.size(Reference.fromJava(object));
}
}