当我在Java中处理线程概念时,我已经看到了Thread.java源文件.我注意到,当setName()方法将字符串分配给一个名为的字符数组时"name[]".Java具有String数据类型的特性,那么它们为什么使用字符数组.
在源文件中,它初始化为,
private char name[]; // why not "private String name;"
Run Code Online (Sandbox Code Playgroud)
在setName()方法中,
public final void setName(String name) {
checkAccess();
this.name = name.toCharArray();
}
Run Code Online (Sandbox Code Playgroud)
请帮我.提前致谢.
此名称是从本机代码访问的,因此与使用Java类型的mangle相比,它更容易处理char数组.在core-lib-devs邮件列表上讨论这个问题前一段时间,这里有一个链接从线到一个邮件.最初的问题表明"相当多的时间进入Thread.setName调用,我认为其中很大一部分是进行新的char分配和复制char数组等".引用答案:
这种方式在2002年底有一个RFE:
4745629(thread)Thread.setName执行不必要的字符串分配(不要使用char [])
2002年的最初评估表明:
"我无法想象这会严重影响任何真实程序的性能.此外,由于此类与VM的密切关系,更改Thread中的字段是有问题的.也就是说,在上下文中可能值得解决这个问题.一些线程代码清理."
然后在2005年,它被关闭为"不会修复":
"在JVM中,名称表示依赖于char数组,必须严格拒绝此RFE."