Java 编译器不会自动优化字符串连接?

标签 java performance optimization jsoup stringbuilder

以下Jsoup code 连接容器 els 中所有元素的文本:

for (Element el : els)
  entireText += el.text();          

在一个包含约 64 个元素的容器中,每个元素包含约 1KB(整个文本中的总和为约 64KB),这个简单的循环在典型的低端 Android 手机上大约需要 8 秒

这种缓慢的性能有点让我吃惊,因为我的印象是 Java 编译器用 new StringBuilder(A).append(B).append 替换了像 A + B + C 这样的表达式(C).toString().

不是这样吗?

我错过了什么?

最佳答案

This slow performance kind of surprises me because I was under the impression that Java compilers substitute expressions like A + B + C with new StringBuilder(A).append(B).append(C).toString().

因此编译器创建代码:

for (Element el : els)
  entireText = new StringBuilder(entireText).append(el.text()).toString(); 

您需要在循环外创建 StringBuilder 并手动附加到它。

关于Java 编译器不会自动优化字符串连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11311234/

相关文章:

java - XA 数据源的性能开销 - 最佳实践

c# - 如何判断代码是否不能进一步优化

c++ - C++:在成员变量的指针传递到其他地方的情况下,如何使编译器优化内存访问

java - 当两个 vector 的元素范围不同时,如何计算两个 vector 的余弦相似度

c++ - 为什么 std::vector::operator[] 比 std::vector::at() 快 5 到 10 倍?

java - 在JAVA中将数字从科学计数法转换为十进制

c# - 有没有一种方法可以有效地将 16 位颜色转换为 24 位颜色,同时避免 float 学运算?

c - 优化此代码,使其代码运行时间小于 1s

java - 有没有一种方法可以使用嵌入式数据库来测试 Postgres Jsonb 查询以进行单元测试?

java - 如何运行多个java运行时作业并等待所有作业完成?