0

我想知道字符串文字和java性能之间的关系。

例如,使用以下语句的次数会对性能产生任何影响。我有数千个课程,而且我们多次使用以下语句:

1) buffer.append(",");
2) buffer.append("}");

3)String.append("10,000 times...same lines") // printing same lines in many classes
3)String.someStringMethod("same line many times") // using any String method 

这是否会在内存管理等方面对性能产生影响。我们有更清洁的方法吗?

谢谢

4

2 回答 2

3

对没有意义的例子发表评论真的很困难。然而:

  • 一般来说,Java 字符串文字没有特别的效率问题。
  • 一般来说,将字符串文字作为参数的方法没有特别的效率问题。
  • 如果一段特定的代码执行得足够频繁,则字符串连接/构建可能会带来效率问题。但是,如果您需要构建字符串,那么您无能为力。

有一两件事值得采取措施避免。主要的是这样的:

   String s = "";
   for (/* lots of times */) {
       // do stuff
       s += someOtherString;
   }

问题是这会生成然后丢弃大量临时字符串。更有效的方法是:

   StringBuilder sb = new StringBuilder();
   for (/* lots of times */) {
       // do stuff
       sb.append(someOtherString);
   }
   String s = sb.toString();

但是,如果分析器告诉您这段特定的代码是一个瓶颈,那么优化这种事情可能才值得。

于 2013-01-26T09:48:05.430 回答
1
  1. 您编写的任何代码都会影响性能,因此最好使用 ",}" 调用一个 append() 而不是 2 个 append。

  2. java.lang.String 类中没有方法 append。

  3. 没有任何 String 方法对 String 对象进行更改。相反,像 String.substring()、String.concat()、String.replace() 这样的方法会创建新的 String 对象。这意味着与使用 StringBuffer 相比,性能受到的影响更大。

  4. 所以通常 StringBuffer 方法比 String 的方法快。但是,最近引入了新的类,称为 StringBuilder。与 StringBuilder 只有一个区别 - 它不是线程安全的。在现实世界的情况下,线程管理由更高级别的容器负责,因此无需确保每个类的线程安全。在这些情况下,建议您使用 StringBuilder。那应该是最快的。

  5. 为了进一步提高 StringBuilder 的性能,您必须知道生成的字符串长度以分配适当大小的 StringBuilder。如果它太大,你会浪费一些内存,但这通常是一个小问题。如果它太小,StringBuilder 将不得不重新创建内部字符数组以腾出空间容纳更多字符。这会使特定的 append() 调用变慢。实际上,这不是慢的调用,而是调用垃圾收集来清理内存。

  6. String 类的特定方法可能比 StringBuffer/StringBuilder 中的方法更好或更快,但是您必须更具体地回答您的问题才能让我回答。

于 2013-01-26T09:55:25.923 回答