RFR (S) 8216302: StackTraceElement::fill_in can use cached Class.name
Aleksey Shipilev
shade at redhat.com
Wed Jan 9 00:08:10 UTC 2019
On 1/9/19 12:24 AM, Mandy Chung wrote:
>> I really don't like the fact the VM is now setting the name field and there's nothing in the Java
>> code to give any indication that this is happening. At a minimum a comment should be added, as is
>> done with other class members that get accessed directly by the VM.
>>
>> I also think core-libs folk should be having a say here.
>
> Catching up on this thread...
>
> Two ways setting the Class::name field isn't pleasant. What about:
>
> public String getName() {
> String name = this.name;
> return name != null ? name : initClassName();
> }
>
> where JVM_InitClassName will call java_lang_Class::name().
Mmm. Should we really change the jvm.h here? Does that involve CSR? It would have ripple effects on
Graal, potential backports (You'd want this in 11, right? I would. This is a visible perf regression
since 8), etc. Note that after handelizing java_lang_Class::name, we cannot simply call it from
JVM_GetClassName.
Do we really think this is worth the hassle like this:
http://cr.openjdk.java.net/~shade/8216302/webrev.XX/
I'd rather prefer to document this:
diff -r 7c99f0c51412 src/java.base/share/classes/java/lang/Class.java
--- a/src/java.base/share/classes/java/lang/Class.java Tue Jan 08 20:27:23 2019 +0100
+++ b/src/java.base/share/classes/java/lang/Class.java Wed Jan 09 00:20:24 2019 +0100
@@ -801,5 +801,6 @@
}
- // cache the name to reduce the number of calls into the VM
+ // Cache the name to reduce the number of calls into the VM.
+ // This field can be set by VM itself without the call to getName0.
private transient String name;
private native String getName0();
...accept that cache can be set on different paths, and move on.
-Aleksey
More information about the hotspot-dev
mailing list