On 12/11/2014 12:40 AM, Aleksey Shipilev wrote:
Hi,

On 11/09/2014 09:45 PM, Aleksey Shipilev wrote:
Thread.getName() returns String, and does new String instantiation every
time, because the thread name is stored in char[]. Even though we use a
private String constructor that shares the char[] array without copying
it, this still hurts some use cases (think extra-fast logging). To the
extent some people actually maintain Map<Thread, String> to avoid it.
  https://bugs.openjdk.java.net/browse/JDK-8059677

Here's the attempt to maintain String instead of char[]:
  http://cr.openjdk.java.net/~shade/8059677/webrev.01.jdk/
  http://cr.openjdk.java.net/~shade/8059677/webrev.01.hs/

Updated webrevs:
   http://cr.openjdk.java.net/~shade/8059677/webrev.02.jdk/
   http://cr.openjdk.java.net/~shade/8059677/webrev.02.hs/

This version incorporates feedbacks from Chris, Staffan and David. I
think it is very close to what we would like to push. Opinions?

All looks good to me.

But I also noticed this strange (to me) assertion in javaClasses.cpp

 void java_lang_Thread::set_name(oop java_thread, oop name) {
assert(java_thread->obj_field(_name_offset) == NULL, "name should be NULL");
    java_thread->obj_field_put(_name_offset, name);
  }

and on investigation it seems like this is dead code - I couldn't locate a call to java_lang_Thread::set_name ?? It would only be usable on an attaching thread (else name can't be null) and we pass the name to the Thread constructor in that case.

Cheers,
David

Testing: JPRT, jdk/test/java/lang/Thread jtreg, hotspot/test/runtime/
jtreg, vm.quick.testlist, nsk.jvmti.testlist, svc.quick.testlist,
vm.tmtools.testlist

Thanks,
-Aleksey.




Reply via email to