在Thread.java第146行,我注意到作者使用char[]
而不是String
作为名称字段。有没有我不知道的性能原因? getName()
在返回名称之前还将字符包装在String中。使用String
不是更好吗?
答案 0 :(得分:6)
总的来说,是的。我怀疑char[]
是出于性能原因而在Thread
中使用的,早在Java中的这些东西需要尽一切努力才能获得不错的性能时。随着现代JVM的出现,这种微观优化早已变得不重要,但它只是被这样做了。
在旧的Java 1.0时代源代码中有很多奇怪的代码,我不会过分关注它。
答案 1 :(得分:2)
很难说。也许他们考虑了一些优化,也许编写这段代码的人只是更习惯于字符串的C风格char*
数组,或者可能在编写代码时他们不确定字符串是否会出现不可变或不可变。但是使用此代码,只要调用Thread.getName()
,就会创建一个新的char数组,因此这个代码在GC上实际上比使用字符串更重。
答案 2 :(得分:1)
也许原因是安全保护?可以使用反射更改字符串,因此作者希望在读取和写入时进行复制。如果你这样做,你也可以使用char数组来加快复制速度。