/* package whatever; // don't place package name! */
import sun.misc.Unsafe;
import java.lang.reflect.Field;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private static final Unsafe theUnsafe;
static {
try {
Field f
= Unsafe.
class.
getDeclaredField("theUnsafe"); f.setAccessible(true);
theUnsafe = (Unsafe) f.get(null);
} catch (ReflectiveOperationException roe) {
}
}
public static void setStaticObjectUnsafe
(final Field field,
Object value
) { final Object staticFieldBase
= theUnsafe.
staticFieldBase(field
); final long staticFieldOffset = theUnsafe.staticFieldOffset(field);
theUnsafe.putObject(staticFieldBase, staticFieldOffset, value);
}
// Integer, not int, so javac won't inline it.
for (int i = 0; i < 1_000_000; i++) {
if (VALUE != 10) {
return VALUE;
}
}
return VALUE;
}
{
useField();
useField();
setStaticObjectUnsafe(Ideone.class.getDeclaredField("VALUE"), 100);
System.
out.
println(useField
()); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKCmltcG9ydCBzdW4ubWlzYy5VbnNhZmU7CmltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJCglwcml2YXRlIHN0YXRpYyBmaW5hbCBVbnNhZmUgdGhlVW5zYWZlOyAKCXN0YXRpYyB7CgkJdHJ5IHsKCQkJRmllbGQgZiA9IFVuc2FmZS5jbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJ0aGVVbnNhZmUiKTsKCQkJZi5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQl0aGVVbnNhZmUgPSAoVW5zYWZlKSBmLmdldChudWxsKTsKCQl9IGNhdGNoIChSZWZsZWN0aXZlT3BlcmF0aW9uRXhjZXB0aW9uIHJvZSkgewoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yKHJvZSk7CgkJfQoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgc2V0U3RhdGljT2JqZWN0VW5zYWZlKGZpbmFsIEZpZWxkIGZpZWxkLCBPYmplY3QgdmFsdWUpIHsKICAgICAgICBmaW5hbCBPYmplY3Qgc3RhdGljRmllbGRCYXNlID0gdGhlVW5zYWZlLnN0YXRpY0ZpZWxkQmFzZShmaWVsZCk7CiAgICAgICAgZmluYWwgbG9uZyBzdGF0aWNGaWVsZE9mZnNldCA9IHRoZVVuc2FmZS5zdGF0aWNGaWVsZE9mZnNldChmaWVsZCk7CiAgICAgICAgdGhlVW5zYWZlLnB1dE9iamVjdChzdGF0aWNGaWVsZEJhc2UsIHN0YXRpY0ZpZWxkT2Zmc2V0LCB2YWx1ZSk7CiAgICB9CiAgICAKICAgIC8vIEludGVnZXIsIG5vdCBpbnQsIHNvIGphdmFjIHdvbid0IGlubGluZSBpdC4KICAgIHN0YXRpYyBmaW5hbCBJbnRlZ2VyIFZBTFVFID0gMTA7CiAgICAKICAgIHN0YXRpYyBJbnRlZ2VyIHVzZUZpZWxkKCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMV8wMDBfMDAwOyBpKyspIHsKICAgICAgICAgICAgaWYgKFZBTFVFICE9IDEwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gVkFMVUU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIFZBTFVFOwogICAgfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgoJewoJCXVzZUZpZWxkKCk7CgkJdXNlRmllbGQoKTsKCQlzZXRTdGF0aWNPYmplY3RVbnNhZmUoSWRlb25lLmNsYXNzLmdldERlY2xhcmVkRmllbGQoIlZBTFVFIiksIDEwMCk7CgkJU3lzdGVtLm91dC5wcmludGxuKHVzZUZpZWxkKCkpOwoJfQp9