Hello!
I have the very simple Utils function:
public static Unsafe getUnsafe(){
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
return (Unsafe) f.get(null);
}
And, as it turned out from my analysis with perf it is a bottleneck in my
"scheme" of the program. That funciton is called in main loop. It is a
scheme so it wasn't optimized (I know that I should do it better).
Nevertheless, perf points that `String::intern` is cpu-cylcle-consuming.
I cannot understand why that method wasn't compiled to something like that:
("theUnsafe" was placed in permgen)
and now:
load string_theUnsafe_from_permgen
call Unsafe.class.getDeclaredField
..
instead of
public static getUnsafe()Lsun/misc/Unsafe;
...
L0
LDC Lsun/misc/Unsafe;.class
LDC "theUnsafe"
INVOKEVIRTUAL java/lang/Class.getDeclaredField (Ljava/lang/String;)Ljava
/lang/reflect/Field;
...
}
Especially, I don't see where method
String.intern
is called? I suppose that it is called by interpreter on
LDC "theUnsafe"
Explain me that, please.
Greetings,
John
--
You received this message because you are subscribed to the Google Groups
"mechanical-sympathy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.