【发布时间】:2013-09-12 21:43:00
【问题描述】:
假设我有一个方法:
public String getString() {
char[] array = new char[]{'a', 'b', 'c'};
return new String(array);
}
数组是否仍然复制到 String 构造函数中,还是 Java 编译器足够聪明,可以识别数组中的元素不能更改,因此它只能引用数组?
谢谢
【问题讨论】:
-
你可以看看
String源代码。 -
是的,我知道字符串源代码会复制数组。我想知道Java编译器是否可以覆盖它?
-
你是指JIT编译器还是
javac? -
任何一个,我只想知道这种优化是否可以发生在管道中的任何地方。
-
我没有办法证明这可以发生,但 Java 有一个称为“逃逸分析”的 JIT 优化。当分配给堆栈会更快时,这可用于避免分配给堆。由于 C++ 现在有移动构造函数,所以在编写代码时假设 Oracle 的某个人会解决这个问题并使用 Escape Analysis 来防止不必要的复制。不要预先优化。 docs.oracle.com/javase/7/docs/technotes/guides/vm/…
标签: java string optimization